在我的守护进程中,我尝试使用 ping 来检测主机是否存活。
代码:
sprintf(pingCmd,"ping -c1 -t%d %s",time,ip);
if (system(pingCmd)) {
//fail
}
else {
//success
}
但是当我拔掉目标主机的网线时。
我的守护进程将阻塞在 system()
#0 0x00007f75362fbc7d in waitpid () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f7536281f5e in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f7536282370 in system () from /lib/x86_64-linux-gnu/libc.so.6
所以我写的是 anthor 程序,而不是守护进程
代码不会在 sysem() 处阻塞,
即使我拔掉目标主机网线,
如何在守护进程中使用 system("ping")
最佳答案
问题是 ping 命令阻塞了。从命令行尝试完全相同的 ping 命令以查看结果。
顺便说一下,我强烈建议在守护进程中实现 ping 本身——你遇到的问题会少得多。通过 system() 函数运行命令会引入很多复杂性,这些复杂性可能会混淆并导致不正确的结果。
话虽如此,要使其正常工作,请通过从命令行进行测试,找到具有正确参数的正确 ping 命令来完成这项工作。确保同时检查超时。
关于c - linux 使用系统 ("ping") 在守护进程中被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380730/