对不起,这个问题很模糊,但我希望有人还可以提供帮助。
据我所知exec
bash命令,它将代码段替换为参数指定的内容。实际上用其他东西替换正在运行的脚本。
但我很确定我看到人们在循环中使用exec
(不是fork
)来重新启动可执行文件,如果它崩溃或只是以非零退出代码退出。不幸的是我现在找不到那段代码。它是可能的还是我想象的东西?
答案 0 :(得分:3)
我不清楚你所看到的是什么,但是可以想到在循环中使用exec来启动和重新启动进程的方法,例如:
while true
do
( unset DISPLAY && exec ./myfile )
done
( .. )
这里是一个明确的子shell,所以即使它不明显也有一个分叉。
将exec
置于循环中的其他可能原因包括尝试执行不同的文件或不同的路径,直到找到有效的文件或创建或可用的文件。
但是,没有办法成功exec
一个没有任何隐式或显式fork的进程,然后循环再次执行自己(除非脚本最终以递归方式执行)。
答案 1 :(得分:1)
这实际上是一个比你想象的更常见的问题。
在过去,我总是实现一个bash脚本来监视进程是否存在,如果不存在,则重新启动它。
以下是一些可能适合您的解决方案: https://serverfault.com/questions/52976/simple-way-of-restarting-crashed-processes