在我的守护进程中,我尝试使用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(),
中阻塞即使我删除了destionation主机网络电缆,
如何在守护程序进程中使用系统(" ping")
答案 0 :(得分:1)
问题是ping命令是阻塞的。从命令行尝试完全相同的ping命令以查看结果。
顺便说一句,我强烈建议在守护进程中实现ping本身 - 你会遇到更少的问题。通过system()函数运行命令会带来很多复杂性,这些复杂性可能会造成混淆并导致错误的结果。
有了这个说法,为了使这个工作,通过从命令行测试,找到正确的ping命令,使用正确的参数来完成这项工作。一定要检查超时。