【问题标题】:Using exec to relaunch crashing binary使用 exec 重新启动崩溃的二进制文件
【发布时间】:2015-01-24 23:32:48
【问题描述】:

对不起,这个问题很模糊,但我希望有人仍然可以提供帮助。 据我了解exec bash 命令,它将代码段替换为参数指定的内容。实际上用其他东西替换正在运行的脚本。

但我很确定我看到有人在循环中使用exec(不是fork)来重新启动可执行文件,如果它崩溃或只是以非零退出代码退出。不幸的是,我现在找不到那段代码。这完全有可能还是我在想象?

【问题讨论】:

    标签: bash exec


    【解决方案1】:

    我不知道您具体看到了什么,但是可以通过多种方式在循环中使用 exec 来启动和重新启动进程,例如

    while true
    do
      ( unset DISPLAY && exec ./myfile )
    done
    

    这里的( .. ) 是一个显式的子shell,所以即使不明显也有一个分叉。

    exec 置于循环中的其他可能原因包括尝试执行不同的文件或不同的路径,直到找到一个有效的文件或文件被创建或变得可用。

    但是,如果没有任何类型的隐式或显式分叉,就无法成功exec 一个进程,然后循环以再次执行自身(除非脚本最终以递归方式执行自身)。

    【讨论】:

    • 谢谢!我不知道(...)。
    【解决方案2】:

    这实际上是一个比您想象的更常见的问题。

    过去,我总是实现一个 bash 脚本来监控进程是否存在,如果不存在,则重新启动它。

    以下是一些适合您的解决方案: https://serverfault.com/questions/52976/simple-way-of-restarting-crashed-processes

    【讨论】:

    • 是的,我确信有不同的方法来监控进程,但我很好奇 'exec' 的用法(不过,谢谢你的链接。它很有帮助)跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多