gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:57 30 4
gpt4 key购买 nike

我有一个监控应用程序 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com