top / htopでプロセスのツリーを殺す


12

htopを使用すると、シェル内のプロセスのツリーをうまく表示できます。プロセスを強制終了するには、を押してF9 (KILL)から、強制終了15 SIGTERMするジョブに送信する信号(例)を選択します。

ただし、これにより、一度に1つのプロセスのみを強制終了できます。を使用してプロセスのツリー全体を強制終了する方法はありhtopますか?

回答:


16

からman htop

インタラクティブなコマンド

プロセスにスペースタグを付けるか、タグを外します。「kill」などの複数のプロセスを操作できるコマンドは、現在ハイライトされているプロセスではなく、タグ付きプロセスのリストに適用されます

U すべてのプロセスのタグを解除します(スペースキーで追加されたすべてのタグを削除します)。

F9、k "Kill"プロセス:メニューで選択されたシグナルを1つまたはグループのプロセスに送信します。プロセスがタグ付けされている場合は、すべてのタグ付けされたプロセスにシグナルを送信します。 タグが付いていない場合、現在選択されているプロセスに送信します。

あなたが探していた答えではありませんが、近いです。killを使用してプロセスグループまたは子を削除することもできます。以下を参照してください。

/programming/392022/best-way-to-kill-all-child-processes


1

htopマンページから:

F5、tツリービュー:親プロセスごとにプロセスを整理し、プロセス間の関係をツリーとしてレイアウトします。キーを切り替えると、ツリーと以前に選択した並べ替えビューが切り替わります。並べ替えビューを選択すると、ツリービューが終了します。

F5キーを押すと、「t」キーを押す必要がある場合があります。ツリー全体を殺すことができます。


1
これは、「ツリー」が必然的にその親にバインドされている場合にのみ機能します。htopはスレッドグループをツリーとして表示することに注意してください(この場合、ブランチは実際のプロセスではありません)。それ以外の場合、孤立した子供はinitによって親が変更されるため、殺されません。
goldilocks 2013

これは関係するプロセスに厳密に依存しますが、私は完全に同意します。たとえば、sshツリーセッションを強制終了すると、基になる子プロシージャが強制終了されます。OPは、なぜ彼が木全体を殺したいと思ったのかについて、特に具体的ではありませんでした。
ステファン

1

htopsコマンドを乗っ取ることができます。ではhtop、を押すとsが呼び出されますstrace -p <the-pid-of-the-selected-process>

次に、strace次のようなコマンドを作成することができます。

#! /bin/sh -
pids=$(ps -eo pid= -o ppid= |
  awk -v exclude="$PPID" -v pid="$2" '
    function descends(p) {
      if (p == exclude) return 0
      if (p == pid) return 1
      if (p <= 1) return 0
      return descends(parent[p])
    }
    { parent[$1]=$2 }
    END {
      for (p in parent)
        if (descends(p))
         print p
    }'
)
if [ -z "$pids" ]; then
  echo >&2 "No process found to kill"
else
  echo >&2 Killing $pids
  kill $pids
fi

そしてそれをのようなディレクトリに~/.htop-hijack置き、htopを次のように呼び出します:

PATH=~/.htop-hijack:$PATH htop

次に、を押すsと、代わりにそのコマンドが呼び出されstraceます(後でメイン画面に戻るにはEscを押す必要があります)。


1

これには長い間機能がありましたが、2018年までマニュアルにはありませんでした。cキーを押して、現在ハイライトされているプロセスとそのすべての子を選択します。次に、選択したプロセスに適用される操作(kキーを使用した強制終了など)がプロセスとその子に適用されます。

ただし、これはアトミックではありません。押しcた瞬間とカーネルがすべてのプロセスを強制終了した瞬間の間に新しい子が生成された場合、それらは強制終了されず、おそらくinitプロセスに再接続されます。これは、htopが選択したプロセスでループし、それらを1つずつ強制終了するためです。

少し前にhtopにアトミックグループキリング機能を追加するパッチ提案しましたが、マージするための実装は十分に合意されていませんでした。これにより、htopからプロセスグループ全体をアトミックに強制終了できます。これはツリー全体を殺すこととはまったく同じではありませんが、私の知る限り、カーネルは任意のツリーをアトミックに殺す方法を提供していません。

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