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

标签 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() 处阻塞,

即使我拔掉目标主机网线,

如何在守护进程中使用 system("ping")

最佳答案

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

顺便说一下,我强烈建议在守护进程中实现 ping 本身——你遇到的问题会少得多。通过 system() 函数运行命令会引入很多复杂性,这些复杂性可能会混淆并导致不正确的结果。

话虽如此,要使其正常工作,请通过从命令行进行测试,找到具有正确参数的正确 ping 命令来完成这项工作。确保同时检查超时。

关于c - linux 使用系统 ("ping") 在守护进程中被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380730/

相关文章:

计算具有给定除数的正整数

python - Enthought Canopy 中的多个内核

linux - shell 中的时间格式更改

python - 你能在 Python 2.4 中使用 python-daemon 吗?

php - 倒计时完成后的服务器端操作

python - 如何在 Python 中生成一个新的独立进程

c - 寄存器中使用 volatile

c++ - 分配指针和使用 strcpy 之间的区别

c - hh 和 h 格式说明符需要什么?

linux - 尝试在 Ubuntu 18、Linux 上安装 QT 包时出现 QXcbConnection 错误