web-dev-qa-db-ja.com

実行中のターミナルプログラムのプロセスID(PID)を見つける方法

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

113
Jjed

別のターミナルを開き、ps ax | grep fooを実行します。ここで、fooは応答しないプログラムの名前です。これにより、次のような出力行が返されます。

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

出力の各行の最初のフィールドは、grepに一致するプログラムのプロセスIDを表す数値です(最後の1つはgrep自体を表しますが、無視しても問題ありません。

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

もちろん、グラフィカルインターフェイスを実行している場合は、このクレイジーなコマンドラインをだます必要はありません。 [システムモニタ]を開き、[プロセス]タブに移動して、停止するプロセス(Hm、90%のCPUを使用している可能性がありますか?)を選択して右クリックします。プロセスはすでに停止しているので(問題ですか?)、表示されるメニューから[プロセスの終了]または[プロセスの強制終了]を選択します。

koanheadへのクレジット

127
Jjed

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

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

pgrep:

   pgrep [options] pattern

DESCRIPTION: pgrepは現在実行中のプロセスを調べ、選択基準に一致するプロセスIDをstdoutにリストします。すべての基準が一致する必要があります。例えば、

  • ルートが所有するsshdという名前のプロセスを見つける。

    $ pgrep -u root sshd
    
  • ルートORデーモンが所有するプロセスをリストします。

    $ pgrep -u root,daemon
    

pidof:

説明

Pidofは、指定されたプログラムのプロセスID(PID)を見つけます。これらのIDを標準出力に出力します。

構文:pidof program_name

  • Pidでプログラムを強制終了するには、pkillの例を使用します。

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

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

46

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

pidof <application name>

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

pidof vim

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

たとえば、viを実行してpidof vimを実行すると、正しい結果が得られません。

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

20
jobin

「-i」を追加し、「ax」ではなく「aux」を使用して大文字と小文字を区別しない検索を使用すると、よりわかりやすい出力が得られます。

ps aux | grep -i firefox

使用できるすべてのプロセスを強制終了する場合:

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

それは強制的な殺害です。ソフトキルが必要な場合は、「-9」をドロップします。

18
John Foley

Pidのみが必要な場合(自動キルスクリプトなどに便利)

pgrep -f desired_program_name
3
MikeL

Ubuntu 16.04 LTSを実行している場合は、you mustpsだけでなくps axを使用しますそれ以外の場合は、現在の特定のターミナルインスタンスからプロセスが生成されます(通常は、単に「bash」[現在のシェル]および「ps」[今実行したもの])

1
cygnus_x1
top

または

screen -list|ls

すべてのpidを対応するプロセスとともにリストします

kill -[pid]
0
Rakly3

できること:

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

最初の2つのパイプはプロセス情報を取得し、次に旧式のカットを使用してPID列を取得し、結果のPIDを強制終了します。

0
Arian Soltani

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

0
Waldir Leoncio