実行中の端末プログラムのプロセスID(PID)を見つけるにはどうすればよいですか?

私は脱出できない端末でプログラムを実行しています Ctrl-C そして、私は殺したいと思います。 どうすればそのPIDを見つけることができますか?

別の端末を開き、実行します ps ax | grep foo ここで、fooは応答しないプログラムの名前です。 これは、次のような出力行を返す必要があります:

$ ps ax | grep firefox2222 ?        S      0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox2231 ?        Sl   514:36 /usr/lib/firefox-3.6.9/firefox-bin30290 pts/2    S+     0:00 grep --color=auto firefox

出力の各行の最初のフィールドは、マッチしたプログラムのプロセスIDを表す数値である。 grep (最後のものは安全に無視することができます。 grep それ自体。

問題のあるプロセスを停止するには、次のようにします:kill pid ここで、pidはプログラムのプロセスIDです。 あなたは一致する必要があるかについてあなたの判断を使用する必要があるかもしれません killed、またはあなたが使用することができます top 代わりに。 を使用して kill これは、プログラムがそれ自身の後で適切にクリーンアップすることを可能にするので、最初に試してみる必要があります。 SIGTERMが失敗した場合は、より強い薬であるSIGHUPを試してみてください: kill -HUP pid. 他のすべてが失敗した場合は、SIGKILLを送信します。 しかし、SIGKILLはカーネルにクリーンアップの可能性なしにすぐにプロセスを終了させるので、最後の手段としてのみそうするべきです。 これにより、データの破損やその他の問題が発生することがあります。 だから再び、最後の手段としてSIGKILLを送るだけです。 これを行うには、次のようにします kill -KILL pid または kill -9 pid.

あなたはグラフィカルインターフェイスを実行している場合は、もちろん、あなたは仕事を得るために、この狂気のコマンドラインのものをだます 「システムモニタ」を開き、プロセスタブに移動し、停止するプロセスを選択します(Hm、90%のCPUを使用している可能性がありますか?)を右クリックします。 プロセスはすでに停止しているので、(それは問題ですよね? 結果のメニューからEnd ProcessまたはKill Processを選択します。

へのクレジット コアンヘッド

Pgrep、pkill、pidofなどで同じコマンドを実行できる場合、そのような長いコマンドは必要ないと思います。..

  • 実行中のプログラムのpidを取得するには

pgrep:

   pgrep [options] pattern

説明 : pgrepは現在実行中のプロセスを調べ、選択基準に一致するプロセスIdをstdoutに一覧表示します。 すべての基準が一致する必要があります。 例えば,

  • Rootが所有するsshdという名前のプロセスを検索します。

    $ pgrep -u root sshd
  • Rootまたはdaemonが所有するプロセスを一覧表示します。

    $ pgrep -u root,daemon

ピドフ:

説明:

Pidofは、指定されたプログラムのプロセスid(pid)を検索します。 これらのidを標準出力に出力します。

構文: pidofプログラム名

  • Pidでプログラムを強制終了するには、pkillexampleを使用します:

    pkill pid    pkill -f process_name    pkill -o process_name    pkill -n process_name    pkill -l process_name

    -f flag:process_nameを検索します(man pkillを参照)。
    -o フラグ:一致するプロセスの中で最も古いもののみを選択します。
    -n フラグ:一致するプロセスの最新のもののみを選択します。
    -l flag:プロセス名とプロセスIDを一覧表示します。

実行中のプログラムのpidを知る最も簡単な方法は、次のものを使用することです:

pidof <application name>

たとえば、vimを起動したときにそのpidを知りたい場合:

pidof vim

開始された正確なプログラム名を指定する必要があることに注意してください。

たとえば、viを実行して実行している場合は、次のようにします pidof vim あなたは正しい結果を得ることはありません。

を参照してください pidof詳細については、のマニュアルページ。

大文字と小文字を区別しない検索を使用するには、"-i"を追加し、"ax"の代わりに"aux"を使用して、より説明的な出力を取得するといいことがわかりました:

ps aux | grep -i firefox

あなたが使用することができるすべてのプロセスを強制終了したい場合:

ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9

それは強制的な殺害です。 あなたはソフトキルをしたい場合は、"-9"をドロップします。

Pidだけが必要な場合(autokillスクリプトなどに便利です。..)

pgrep -f desired_program_name

Ubuntu16.04LTSを実行している人のために, あなた 必須 使用 ps ax とだけではなく、 ps コマンドラインでは、それ以外の場合は、あなたがいる特定の端末インスタンスから生成されたプロセスを取得するだけです。 (通常は'bash'[あなたがいるシェル]と'ps'[あなたが今実行したもの]だけです)

また、別の端末を開いて(または別のttyに切り替える)、次のように実行することもできます top これは基本的にシステムモニタのテキストバージョンです。 最初の列には、実行中の各プロセスのPIDが一覧表示されます。 K PIDを入力してから、送信する数値信号を入力します。

あなたが行うことができます:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

最初の2つのパイプはプロセス情報を取得し、次に古い学校のカットを使用してPID列を取得しようとし、結果のPIDをkillします。

top

または

screen -list|ls

対応するプロセスを持つすべてのpidを一覧表示する

kill -[pid]

これは[Ubuntuがフリーズしたときにどうすればいいですか?](performance - What should I do when Ubuntu freezes? - Ask Ubuntu

Pidofコマンドがあります。