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