c - 使用 nohup 或 setsid 逃避 alarm() 进程超时?

标签 c linux shell unix system

我有一个监控应用程序 Zabbix 代理,它允许我运行任意命令/脚本并获取返回值。代理配置了超时,任何超过超时的命令都将被终止。

对于运行的每个命令,它首先通过 alarm(timeout) 设置超时然后 fork agent process在通过 execl("/bin/sh", "sh", "-c", command, NULL) 在新的 shell 中运行命令之前。

我有一个尴尬的场景,我无法将代理配置超时调整为大于 2 秒,但我需要运行的命令将花费 10-30 秒。

所以我想知道是否有人知道我可以指定一个命令,该命令在运行时可以逃避超时并运行直到完成。我正在尝试 nohupsetsid 认为它不会继承父级中设置的超时,但由于某种原因它仍然被杀死。

这是我的示例.. 代理期望 1 在超时内返回,所以我在 subshel​​l 中启动长时间运行的命令并立即回显 1 以安抚它。 /opt/scripts/test/long_running.sh 仍然会被杀死。我希望使用 nohup 运行并在子 shell 中运行它可以避免超时。

UserParameter=my.test.cmd,nohup sh -c "(/opt/scripts/test/long_running.sh $1 &); echo 1"

感谢阅读。

fLo

最佳答案

nohup 通常会抑制输出并打印其他内容,因此服务器可能会看到 Redirecting output to nohup.out 而不是预期的 1.

尝试类似的东西

echo 1; nohup sh -c "/opt/scripts/test/long_running.sh $1" >& /dev/null

关于c - 使用 nohup 或 setsid 逃避 alarm() 进程超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30340089/

相关文章:

c - K&R C书中的atoi函数

c - libusb_get_device_descriptor() 始终返回 0。如何检测故障?

linux - 导入错误 : No module named matplotlib with matplotlib installed

linux - 有没有办法捕获命令的输出,并将其返回值转换为 shell 脚本中的变量?

c - C 编程初学者的家庭作业帮助

c - 值不是数组、指针或 vector

python - 将调色板颜色的 16x16 真彩色图像转换为实际的调色板文件

linux - 通过 shell 脚本发送推文到 Twitter

linux - 如何比较两个列表的第一个词并打印匹配条目的第二个词?

python - 使用 python SSH 和 telnet 到本地主机