応答しないプログラムの待機時間を増やすにはどうすればいいですか?

応答しないプログラムの待機時間を増やすにはどうすればいいですか?

Ubuntu GNOME をインストールしたところ、「プログラムが応答していません」というメッセージが多数表示されることがわかりました。

プログラムを「強制終了」するか、もう少し「待つ」必要があります。

プログラムを待つたびに、最終的に問題なくプログラムが続行されることに気付きました。

だから私は考えるプログラムが応答していないとみなされる「タイムアウト」構成がある可能性があり、このタイムアウトを長くしたいと考えています。

答え1

設定できませんでした。タイムアウト値は mutter ソースで定数値として定義されています。gnome-shell は mutter ライブラリを参照します。タイムアウト値は mutter ソース、mutter-3.10.4/src/core/display.c で見つかりました。

...
#define PING_TIMEOUT_DELAY 5000

そして、それはmeta_display_ping_windowという名前の以下の関数によって使用されます。

ping_data->ping_timeout_id = g_timeout_add (PING_TIMEOUT_DELAY, meta_display_ping_timeout, ping_data);

ウィンドウがアクティブ化されたときに関数から参照されます:

window_activate(mutter-3.10.4/src/core/window.c) -> meta_window_check_alive(mutter-3.10.4/src/core/delete.c) -> meta_display_ping_window(mutter-3.10.4/src/core/display.c)

上記のように、タイムアウトは 5 秒です。

mutter はオープンソース プロジェクトなので、値を自分用に変更できます。

そして、ウィンドウが閉じられたときのタイムアウト値は別のケースで参照されます。ウィンドウの削除フローは次のようになります。

meta_window_delete(mutter-3.10.4/src/core/delete.c) -> meta_window_check_alive(mutter-3.10.4/src/core/delete.c) -> meta_display_ping_window(mutter-3.10.4/src/core/display.c)

ただし、遅延ウィンドウのソースを変更する必要があると思います。または、mutter の開発者/メンテナーと話し合うこともできると思います。

次のコマンドでビルド環境を準備し、ソースを取得できます。

$ sudo apt-get build-dep mutter
$ sudo apt-get source mutter

構築するには、

https://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html https://wiki.debian.org/BuildingTutorial

答え2

dconf (/org/gnome/mutter/check-alive-timeout) 経由で mutter 値を変更できます - デフォルトは 5000 です。

答え3

このバグは修正されました。2019年6月6日にUbuntu 18用のバックポートがgnome-shell 3.28.4としてリリースされました。「ウィンドウが応答しません」ダイアログを無効にする方法

答え4

この古い質問に答えることに意味があるかどうかはわかりませんが、誰かにとっては役立つかもしれません。

mutter ライブラリをソースからビルドしようとしましたが、このライブラリは他の多くのライブラリに依存しており、それらのライブラリも他のライブラリに依存しているため、断念しました。

このダイアログが表示されたら閉じる方法が必要でしたが、ワインアプリケーションです。そこで、このウィンドウが表示されたら終了する小さなスクリプトを bash で作成しました。

#!/bin/bash 

while [  true ]; do
    VAL=$(ps -fA | grep "class mutter-dialog" | grep -cv grep)

    if [ $VAL -eq 1 ]
    then
            ID=$(ps -fA | grep "class mutter-dialog" | grep -v grep | awk '{print $2}')
            sleep 5
            echo killing $ID
            kill $ID
            exit 0
    fi

    sleep 10
done

関連情報