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