我想在bash脚本中循环一个进程,它是一个应该永远运行但有时会失败的进程。
如果失败,它会将>>747;3R
输出到最后一行,但会继续运行。
我试过(仅用于测试)
while [ 1 ]
do
mono Program.exe
last_pid=$!
sleep 3000
kill $last_pid
done
但它根本不起作用,进程mono Program.exe
只是永远运行(直到它崩溃,但即便如此,我的脚本什么都不做。)
答案 0 :(得分:0)
$!扩展到后台启动的最后一个进程的PID。这可以通过以下方式看出:
cat test
sleep 2
lastpid=$!
echo $lastpid
~$ bash -x test
+ sleep 2
+ lastpid=
+ echo
VS
~$ cat test
sleep 2 &
lastpid=$!
echo $lastpid
:~$ bash -x test
+ lastpid=25779
+ sleep 2
+ echo 25779
脚本的固定版本为:
while true; do
mono Program.exe &
last_pid=$!
sleep 3000
kill $last_pid
done
您的版本正在运行mono Program.exe然后坐在那里。它没有进入下一行,因为它正在等待该过程完成。你的kill命令然后不能用作$!从未填充(不是后台进程)。