質問
プロセスによって生成されたグラフィカルウィンドウをクリックしてプロセスにSIGSTOP
(プロセスを一時停止する)またはSIGCONT
(プロセスを再開する)を送信するツール/スクリプトを知っていますか?
一部のコンテキスト
ウィンドウをクリックするとプログラムを強制終了するxkill
というツールが既にありますが、特定のシグナルを送信するオプションはありません。 kill
などのやや関連するコマンドラインツールにはこのオプションがあるため、これは残念です。
通常、対応するプロセス名を手動で取得し、kill
、pkill
、またはkillall
などのツールを使用して、コマンドラインでこれを行いますが、これをグラフィカルに、 xkill
ツールでウィンドウをクリックするのと同様の方法。
アプリケーション
CPUが過度に「ストレス」を受けている場合、それらを終了せずに保存できないデータを失うことなく(たとえば、長い計算の部分的な結果)、重いプロセスをグラフィカルに一時停止するには、このようなツールが非常に便利だと思います。
xdotool
を使用して、ユーザーがウィンドウをクリックしてそのプロセスIDを取得できるようにすることができます。次に、kill
を使用して、たとえばSTOPまたはCONTはそのプロセスに信号を送り、そのように凍結/解凍します。
最初に、xdotool
をインストールする必要があります。プリインストールされていないためです。
Sudo apt install xdotool
次に、特定のウィンドウを所有するプロセスのPIDを取得するコマンドは、マウスでクリックして選択できます。
xdotool selectwindow getwindowpid
これにより、数値のプロセスIDが出力されます。 kill -STOP
またはkill -CONT
への引数として指定して使用すると、上記のプロセスを一時停止して続行できます。これは、クリックしたウィンドウのプロセスを5秒間一時停止する以下のこの小さなスクリプトのように、変数にPIDを保存することで簡素化できます。
#!/bin/bash
wpid="$(xdotool selectwindow getwindowpid)"
kill -STOP "$wpid"
sleep 5
kill -CONT "$wpid"
これで、このスクリプトをコンピューターに保存できました。キーボードショートカットにバインドします。
注:
man xdotool
はgetwindowpid
サブコマンドについて説明します。「これには、ウィンドウを所有するアプリケーションの努力が必要であり、すべてのウィンドウで機能しない場合があります。」
言い換えると、一部のアプリケーションで意図したとおりに動作しないか、少なくとも正確に動作しない可能性があります。
複数のウィンドウが同じ対応するプロセスIDを持っている場合もあります。すべてのgnome-terminalインスタンスは同じ親によって所有されています。その場合、コマンドはそれらのすべてを凍結しますが、これは意図されていない可能性があります。
Byte Commander♦の回答の改善:
そのためのxdtoolベースのスクリプトがあります: https://github.com/RegisterFault/clickstop
クリックされたアプリケーションのプロセスツリーにSIGSTOPおよびSIGCONTシグナルを送信するためにxdotoolを使用するBashスクリプト
利点は、プロセスツリー全体を中断することです。これは、たとえばマルチプロセスchromeまたはfirefoxを中断するために必要です。