使用nohup或setsid转义alarm()进程超时?

时间:2015-05-20 04:06:54

标签: c linux shell unix system

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

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

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

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

这是我的示例..代理期望1在其超时内返回,因此我在子shell中启动长时间运行命令并立即回显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

1 个答案:

答案 0 :(得分:1)

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

尝试类似

的内容
1