【发布时间】:2011-11-07 00:47:57
【问题描述】:
可能重复:
How do I write a bash script to restart a process if it dies?
我制作了一个 C 程序,它偶尔会崩溃,但我无法修复它(getaddrinfo 的一些问题,看起来相当自发)。我想在崩溃时重新启动程序。我以为这很容易。我打算用 fork 将有问题的 libcurl 代码分开,并查看如何检测关闭的进程,以便它可以再次分叉。但是,我选择了“简单”选项,尝试重新启动整个程序并从文件中恢复数据。
我试过了:
#!/bin/sh
while true; do
cd "~/ProgramDir"
exec "~/ProgramDir/Program"
done
但是当程序因失败而退出时,它会开始将下一次执行输出到终端输入(如果这有意义的话)。所以如果我假装我的程序只是一个 Hello World 程序,那么它会做这样的事情:
bash-3.2$ start.sh
Hello World!
Hello World!
bus error
bash-3.2$ Hello World!
-bash: Hello: command not found
bash-3.2$ Hello World!
-bash: Hello: command not found
它不会像以前那样继续程序。终端认为程序已经退出,但随后将下一次执行的输出带到终端输入。
这样做的正确方法是什么?
【问题讨论】:
-
您确定正确粘贴了实际的启动脚本(尤其是引号)吗?
-
这是一个非常糟糕的方法。只需找出程序崩溃的原因并修复它。
标签: c macos bash shell terminal