【发布时间】:2015-09-05 05:01:17
【问题描述】:
我有一个运行长时间运行的脚本。 此进程当前在超时后停止。
#!/bin/bash
timeout 3600 ./longrunningprocess
我现在的问题是这个进程在超时之前没有返回,有时我需要提前停止它。
我需要什么?
我想并行启动其他一些脚本,它会定期检查我的 longrunningprocess 是否应该停止。当这个 bash 脚本返回时,应该终止 timeout 命令。
知道如何实现吗?
有没有类似超时命令的东西?不是时间跨度,而是我可以启动的脚本,类似于事件触发器?
例如
#!/bin/bash
fancyCommandKillsSecondCommandIfFirstCommandReturns "./myPeriodicScript.sh" "timeout 3600 ./longrunningprocess"
谢谢!
编辑:类似“并行启动 2 个进程并在一个返回时终止两个进程”之类的东西也可以工作......
Edit2:答案给了我一些关于脚本的想法:
#!/bin/bash
FirstProcess="${1}"
SecondProcess="${2}"
exec $FirstProcess &
PID1=$!
exec $SecondProcess &
PID2=$!
function killall {
if ps -p $PID1 > /dev/null
then
kill -9 $PID1
fi
if ps -p $PID2 > /dev/null
then
kill -9 $PID2
fi
}
trap killall EXIT
while true; do
if ! ps -p $PID1 > /dev/null
then
exit;
fi
if ! ps -p $PID2 > /dev/null
then
exit;
fi
sleep 5;
done
这种做我想要的。是否有任何本机功能或更好的方法来做到这一点?
【问题讨论】:
-
您可以使用
crontab启动定期脚本检查并终止您的工作。至于杀戮本身,我不知道。 -
我必须添加一些信息:运行启动 longrunningprocess 的脚本的脚本使用不同的参数多次运行。因此,全局 crontab 可能不是解决方案,因为它取决于当前上下文。在 C# 中,我可能会使用 CancellationTokens...