killallを使用してプロセスを正常に終了する

killallを使用してプロセスを正常に終了する

Icedove(Thunderbird)の複数のインスタンス(プロファイル)を使用しているために使用するすべてのインスタンスを終了する必要がある場合:

killall icedove

man killall信号名が指定されていない場合にSIGTERM送信されます。

And, `SIGTERM` allows the process to perform nice termination releasing 
resources and saving state if appropriate.

プラグインをインストールした後にIcedoveを終了すると、プラグインの設定変更が失われました。手順を繰り返し、Icedoveを正しく閉じる必要がありました(メニューで終了を使用)。

私はこれが単なる逸話的な証拠であることを知っています。私は決定的な主張をするのに十分な観察力がありません。

しかし、まだ、終了要求を次のようにすることは可能ですか?killall <processname>、Menu-> Exit?を使用してアプリケーションを閉じるのと同じように、シャットダウンがきれいになるようにします。

答え1

信号用語許可する終了する前にクリーンアップを実行するプロセスですが、プロセスが実際に実行するかどうか、および実行するクリーンアップの種類は、プログラムの作成方法とプログラムが作成される言語の機能(ある程度)によって異なります。したがって、プログラムがSIGTERMを受け取ると、何も保存する義務はありませんが、現在開いているファイルはすべて閉じられる可能性が高くなります。

SIGUSR1のように、SIGTERMよりも「より良い」シグナルがありますが、プログラムはそのシグナルを受信するように特に書かれていない限り、これらのシグナルを無視します。

答え2

wmctrl特定のアプリケーションのすべてのウィンドウを正常に閉じるために使用できます。 1(私の知る限り「メニュー - >終了を使用してアプリケーションを閉じるのと同じくらいきれいです。」)。
アプリの使用wm_class:

for win in $(wmctrl -lx | awk '$3 ~ /Icedove/ {print $1}'); do wmctrl -ic "$win"; done

アプリの使用pid:

for win in $(wmctrl -lp | awk -v icepid=$(pgrep icedove) '$3 == icepid {print $1}'); do wmctrl -ic "$win"; done

1:トレイ対応アプリの場合、アプリを閉じるとトレイに最小化されます。すでにトレイに入っている場合は、-c何もしません。wmctrlこの状況の代替シャットダウンまたは「kill」コマンドはありません(源泉)。

関連情報