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


10

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。ただし、この例では何もしませんでした。誰かがそれを使用する方法についてのアイデアを持っていますか?


どのシェルを使用していますか?
FatalError 2013年

@FatalError私はバッシュを使用しています
Firegun 2013年

この質問のUnix.SEクローンも参照してください。
Adam Katz 2017年

回答:


4

kill 0kill 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コマンドがあります。組み込みのものbash(bash(1)の「シェル組み込みコマンド」を参照)と外部のもの/bin/kill。これら2つは異なる動作をする可能性があります!入力するbuiltin killか、のcommand kill代わりに、実行するものを明示的に指定できますkill。パスを指定して実行できる外部コマンド:/bin/kill


1
PPIDあるが多いですプロセスIDは、必ずしも必要ではないが、プロセスグループID。正しい列はPGIDで、デフォルトのps出力には表示されません。-oオプションを使用して、それを含むカスタム形式を作成する必要があります。
chepner 2013年

@chepner:ありがとうございます!Cygwinのps(1)のマニュアルページに「-l、--long:show process uids、ppids、pgids、winpids」と混同されていました。恥ずかしくて、それに応じて私の答えを編集しました。ただし、私の説明(man + pagerだけが同じPGIDを持っている)は、意図したとおりに正しくなりました。(その文さえ間違っていた前に:-(
mpy 2013年

1

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

kill -kill 0

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.