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


117

私は、私は逃げることができないターミナルでプログラムを実行しているCtrl- Cと私は殺したいということ。PIDを見つけるにはどうすればよいですか?


1
これは、Ubuntuがフリーズしたときどうすればよいですか?その質問の詳細が技術的になりすぎないようにするための参照として。
ジェド

pidofコマンドがあります。
-neverMind9

回答:


128

別の端末を開いて、実行してps ax | grep foofooが応答しないプログラムの名前です。これにより、次のような出力行が返されます。

$ 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

出力の各行の最初のフィールドは、一致したプログラムのプロセスIDを表す数値grepです(最後の1つはそれgrep自体を安全に無視できます)。

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

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

功績koanhead


5
他のすべての方法が失敗しない限り、人々は決してSIGKILL(kill -9)を使用しないでください。リストのみkill -9が悪いアドバイスです。答えを編集して修正しました。
スコットセヴェランス

カスタム関数のpidを見つけるにはどうすればよいですか。pingコマンドとでループを含む関数がありsleepます。unix.stackexchange.com/a/275826/72988によると、Ubuntuでを使用することはできませんmultiplexer
ティモ

49

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

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

pgrep:

   pgrep [options] pattern

説明: 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
    

    -fflag:process_nameを検索します(man pkillを参照)。flag
    -o:一致する最も古いプロセスのみを選択します。
    -nflag:一致する最新のプロセスのみを選択します。
    -lflag:プロセスIDとプロセス名をリストします。


1
これが最良の答えです
-BlackDivine

21

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

pidof <application name>

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

pidof vim

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

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

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


これはデフォルトではインストールされません。sysvinit-utilsパッケージに含まれている可能性があります。
フリッカーフライ14

MariaDBを入手しました。pidof mysqldPIDを返します。ただし、入力してpidof Mariadbも何も返されません。MariaDBとMySQLの両方で同じPIDですか?
パトロス

18

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

ps aux | grep -i firefox

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

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

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


5
また、コマンドにps aux | grep -i firefox...テキストが含まれているため、プロセスも強制終了されますfirefox
エリック14

1
grep -i firefo[x]firefoxのみに一致させるために使用できる@Eric
AD

@ジョン・フォーリーは、使用することをお勧めしません-9kill見、ここでの説明のために
AD

3

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

pgrep -f desired_program_name

1

Ubuntu 16.04 LTSを実行している場合ps axps、コマンドラインだけなく使用する必要あります。そうしないと、現在の特定のターミナルインスタンスからプロセスが生成されます(通常は単に「bash」 ]および 'ps' [実行した内容])


私はps -e(すべてを表示)とps -ejH(プロセスツリーを表示)が好きです。
アンドリュー

1
先端に感謝-それは実際にはかなり甘いですが、素敵な@Andrew
cygnus_x1

0

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


0

できること:

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

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


kill -9プロセスを殺さなければならない最大の銃です。プロセスにリソースをクリーンアップする機会を与えるために、SIGKILLに頼る前に、最初はより穏やかなシグナルを試す必要があります。
バイトコマンダー

それは本当の@ByteCommanderです。私はそれを仕事を成し遂げる一つのライナーにしたかった。
アリアンソルタニ

0
top

または

screen -list|ls

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

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