如果它输出一些字符串重启程序

时间:2016-11-08 08:08:33

标签: bash shell

我想在bash脚本中循环一个进程,它是一个应该永远运行但有时会失败的进程。

如果失败,它会将>>747;3R输出到最后一行,但会继续运行。

我试过(仅用于测试)

while [ 1 ]
do
  mono Program.exe
  last_pid=$!
  sleep 3000
  kill $last_pid
done

但它根本不起作用,进程mono Program.exe只是永远运行(直到它崩溃,但即便如此,我的脚本什么都不做。)

1 个答案:

答案 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命令然后不能用作$!从未填充(不是后台进程)。