【发布时间】:2012-04-19 04:56:30
【问题描述】:
在 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代替吗?效率不高,但更简单 -
"60" 必须是最大执行时间上限。应用程序的实际运行时间可能会低很多。所以不,这对我来说效率很低。
-
如果这些程序真的需要你使用
kill -9,它们就坏了。另见iki.fi/era/unix/award.html#kill