echo $$
シェルのPIDを伝えます。したがって、このシェルを使用して殺す場合
kill 123 #suppose 123 is PID of Shell
実際には何も起こりません、私はそれを試しました。私は再び走った
echo $$
シェルは同じPIDで実行されていました。シェルが停止しないのはなぜですか?シェルが殺されたらどうなりますか?
主な理由は、TERM
シグナルをトラップするためにシェルが構築されているためです。この動作は文書化されています。 bash 4.3マニュアルを引用するには:
信号
Bashは、トラップがない場合にインタラクティブである場合、SIGTERMを無視し(kill 0がインタラクティブシェルを強制終了しないように)、SIGINTがキャッチされて処理されます(ビルトイン待機が割り込み可能になるように)。すべての場合において、bashはSIGQUITを無視します。ジョブ制御が有効な場合、bashはSIGTTIN、SIGTTOU、およびSIGTSTPを無視します。
man kill
から:
KillのデフォルトのシグナルはTERMです。
kill -KILL $$
を指定すると、実際にシェルが強制終了され、制御シェルが終了すると、ターミナルが閉じられます。オプション-9
、-KILL
および-SIGKILL
はすべて同じkill
信号のエイリアスであり、これがこれら3つのいずれかが機能する理由であり、Siguzaが指摘したエイリアスの1つです。コメントでアウト。
M. Becerraが言ったこととは対照的に、ウィンドウPIDは常にシェルのものとは異なるため、これはウィンドウ自体とは関係ありません。
# Shell PID
$ cat /proc/self/status | grep '^Pid:'
Pid: 7058
$ echo $$
14709
# GUI window PID
$ xdotool getactivewindow getwindowpid
2774