崩溃时重新运行应用程序脚本?

Dic*_*dor 23 bash scripts

我有一些应用程序需要一直在我的笔记本电脑上运行。

我使用 bash 脚本来启动这些应用程序。在我的脚本中,我有一个与此类似的循环:

while true;
do
    xterm
done
Run Code Online (Sandbox Code Playgroud)

这将运行一个应用程序(xterm在本例中),如果应用程序崩溃,循环将再次启动它。

这有一个缺点,即该循环没有“干净”的退出。因此,即使用户的意图是 close xterm,循环也会再次启动它。

有没有办法从 bash 脚本启动应用程序,观察它是否正在运行,如果脚本崩溃重新运行它或者如果用户正确关闭它什么都不做

Cyr*_*rus 40

尝试这个:

while true; do xterm && break; done
Run Code Online (Sandbox Code Playgroud)

应用程序有退出状态代码所以如果某些东西退出正常,它会返回零……如果出现问题,它会抛出另一个数字。这使人们可以深入了解并找出确切的问题。这就是另一个答案正在做的事情。

&&只是检查上一个命令是否是零状态退出,如果是,则中断循环。如果它崩溃了,它会抛出 0 以外的东西,并且&& ...子句不会触发;它会简单地循环返回并运行xterm

  • 这是相当优雅的。 (7认同)
  • 我创造了一个怪物。我该如何杀死它? (5认同)
  • 回答 @Tony Ruth 的后续问题:“我创建了一个怪物。我该如何杀死它?”:您可以使用 gdb 及其进程 id 附加到进程: `sudo gdb -p <pid> `。然后从 GDB 中运行“call exit(0)”,进程将以状态 0 退出。也许不是最优雅的,但它会让你退出。 (2认同)

小智 9

在这种while情况下,您可以使用以下内容测试退出状态是否xterm成功:

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done
Run Code Online (Sandbox Code Playgroud)

$? 变量保存上次执行命令的退出状态。