如何保持图形应用程序运行,即使它崩溃了?

如何保持图形应用程序运行,即使它崩溃了?

我使用 Gnome Do 作为大多数应用程序的启动器。我将其设置为在登录时运行,大多数时候它都处于后台等待我按下键盘快捷键。大约每周一次,它就会崩溃。我按下快捷键,但什么也没发生。我不得不重新启动它。

这不是特别烦人,但我想知道是否有任何好方法可以确保桌面应用程序永远运行。如果它们死机了,它们会重新启动(也许会设置崩溃超时,这样如果它在加载时崩溃,它就不会一遍又一遍地尝试运行它)。

我知道有些应用程序会这样做。在 Gnome2 上,如果 gnome-panel 未运行,系统会强制加载它。有没有一种简单的方法可以利用这种逻辑(当然,不会破坏 Gnome)。

我不希望这个问题太具体到 Gnome Do 甚至 Gnome,因为我有多个解决方案应用程序(我在我们的媒体中心的 OpenBox 桌面上运行 Boxee)并且我相信其他人都有他们自己的问题,他们想通过类似这样的方法来解决。

答案1

另一个不太优雅的解决方案:

#!/bin/bash

threshold=2
program="$1"

while true; do
    start=$(date +%s)
    "$program"
    ret_val=$?
    stop=$(date +%s)
    if [[ ret_val -eq 0 ]]; then
        # normal exit, quit
        exit 0
    else
        # abnormal exit, check runtime. if < threshold quit
        runtime=$((stop - start))
        if [[ runtime -lt $threshold ]]; then
            echo "crash on start"
            exit 1       
        fi
    fi
done

如果程序(第一个参数)以返回码 != 0 退出并且至少运行了临界点秒。

我尝试使用以下方式创建 Upstart 作业重生重生限制选项,但不知何故失败了。

答案2

一个简单但不是特别优雅的解决方案是从循环脚本启动应用程序,例如

#!/bin/bash

while true
 do
    gnome-do # or application of choice
    sleep 10 # prevent super-spawn rates
done

尽管这可能必须针对每个应用程序进行检查,因为 bash 不会暂停所有程序......

您还可以对其进行调整以检查错误代码,这样它只会在应用程序崩溃时重生,而不是关闭。

相关内容