web-dev-qa-db-ja.com

kill 0は実際に何をしますか?

man pageには、次のように書かれています。

          0      All processes in the current process group are signaled

そして私はこのように試しました:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

私が理解したように、kill 0は、pid15247を含む現在のプロセスのすべてのプロセスを強制終了します。ただし、この例では何もしませんでした。誰かがそれを使用する方法についてのアイデアを持っていますか?

10
Firegun

kill 0がkill manページ(debian)でどのように動作するかについてのメモが見つかりませんでした。

しかし、私は2つのコメントがあります:

(1)「プロセスグループ」はあなたが期待するものではないかもしれません。プロセスグループID(PGID)はps -o "%p %P %r %c %a"で表示できます。

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

したがって、manと表示ページャーツール(less)は同じプロセスグループにありますが、シェル(私の場合はzsh)とは異なります。

(2)おそらく2つの異なるkillコマンドがあります。 1つはbash(bash(1)、セクション「Shell BUILTINCOMMANDS」を参照)および外部の/bin/killに組み込まれています。これら2つは異なる動作をする可能性があります! killの代わりにbuiltin killまたはcommand killと入力することで、実行するものを明示的に指定できます。パスを指定して実行することもできる外部コマンド:/bin/kill

4
mpy

すべてのプロセスを停止してログオフするには、次のように入力します。

kill -kill 0

これにより、シグナル9、SIGKILLシグナルが、送信者のプロセスグループIDと等しいプロセスグループIDを持つすべてのプロセスに送信されます。シェルはSIGKILLシグナルを無視できないため、これによりログインシェルも停止し、ログオフします。

これはIBMのAIXマニュアルですが、おそらくその概念が当てはまります。

この機能はLinuxの「kill」には存在しません(私が見ることができるように);しかし、これが「キル」の動作です。

0を強制終了しても、pid 0は強制終了されません。代わりに、current group内のすべてのプロセスを強制終了するオプションです。 。コマンドを使用すると、killコマンドを発行したシェルのプロセスグループID(GID)内のすべてを強制終了します。

1
Dane Balia