linux在守护程序进程中阻止使用系统(" ping")

时间:2015-09-03 16:14:39

标签: c linux daemon ping

在我的守护进程中,我尝试使用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")

1 个答案:

答案 0 :(得分:1)

问题是ping命令是阻塞的。从命令行尝试完全相同的ping命令以查看结果。

顺便说一句,我强烈建议在守护进程中实现ping本身 - 你会遇到更少的问题。通过system()函数运行命令会带来很多复杂性,这些复杂性可能会造成混淆并导致错误的结果。

有了这个说法,为了使这个工作,通过从命令行测试,找到正确的ping命令,使用正确的参数来完成这项工作。一定要检查超时。