在Bash脚本中,我想要做类似于:
app1 &
pidApp1=$!
app2 &
pidApp2=$1
timeout 60 wait $pidApp1 $pidApp2
kill -9 $pidApp1 $pidApp2
即,在后台启动两个应用程序,并给它们 60 秒完成其工作。然后,如果它们在该时间间隔内没有完成,就杀死它们。不幸的是,上面的方法行不通,因为
timeout
是一个可执行文件,而 wait
是一个 shell 命令。我尝试将其更改为:timeout 60 bash -c wait $pidApp1 $pidApp2
不过这仍然无法正常工作,因为wait
只能在同一Shell中启动的PID上调用。
有任何想法吗?
sleep 60
吗?虽然不够高效,但更简单易懂。 - Shahbazkill -9
,那么它们是有问题的。另请参见 http://www.iki.fi/era/unix/award.html#kill - tripleeebash
的wait
命令不支持超时,因为它是使用系统调用wait()
或waitpid()
实现的,具体取决于是否向其传递了 PID。这两个系统调用都不原生支持超时。也许可以使用信号处理程序和 alarm 来摆脱等待子进程而不实际等待,但我还没有测试过它是否真正可行。 - Mikko Rantalainen