Linux プロセスのプロセス ID を見つけるには、次のように pidof コマンドを使用します: 「pidof example_name」。PID 名の一部しかわからない場合は、代わりに「pgrep example_name_fragment」を使用できます。「example_name」と「example_name_fragment」を検索する用語に置き換えます。
Linux プロセスを操作するには、多くの場合そのプロセス ID (PID) を知る必要があります。これは、実行中のソフトウェアの各部分に与えられる一意の番号です。PID を見つける方法は 2 つあります。
Linux プロセス ID とは何ですか?
内部的に、Linux は一意の ID 番号 (プロセス ID または PID と呼ばれる) を割り当てることで実行中のプロセスを追跡します。実行中のすべてのアプリケーション、ユーティリティ、およびデーモンには PID があります。
PID は単純な整数値です。新しく開始されたプロセスは、最後に発行された PID よりも 1 つ大きい PID を受け取ります。したがって、PID が最も大きいプロセスは、最も新しく (つまり、最近) 起動されたプロセスです。これは、システムが PID の最大値に達するまで続きます。
PID の上限は 32768 です。この値に達すると、Linux は先頭に戻り、以前に所有していたプロセスが終了したために解放された PID を探します。
PID が 1 のプロセスは、ブートアッププロセスによって Linux が起動されたときに起動される最初のプロセスです。systemd ベースのシステムでは、systemd
になります。他のシステムではinit
になる可能性が高いですが、一部の Linux ディストリビューションでは OpenRc や s6 などの代替手段を使用しています。
通常、そのプロセスに対して何らかのアクションを実行したい場合に、プロセスの PID を見つけることが役立ちます。プロセスの名前がわかっている場合にそのプロセスの PID を見つける方法を 2 つ紹介します。
pidof コマンドを使用して Linux PID を取得する方法
pidof
コマンドは、「PID」と「of」の組み合わせと考えることができます。これは、このプロセスの PID は何ですか? と尋ねているようなものです。パラメーターなしでコマンドを使用すると、何も実行されません。コマンドプロンプトに何も表示されずに返されます。プロセス名を指定する必要があります。
pidof bash
pidof
は、Bash シェルの PID が 8304 であることを示しています。ps
コマンドで確認できます。ps
をパラメーターなしで呼び出すだけです。現在のセッションで実行されているプロセスが報告されます。
ps
ps
は、bash
プロセスとps
プロセスが実行されていることを示して、見つけられるすべてのプロセス (自身を含む) について報告します。予想通り、bash
プロセスにはpidof
で報告されたのと同じ PID があります。
複数のターミナルウィンドウを開いている場合、pidof
はそれらすべてを報告します。
pidof bash
PID は上から下、つまり最新の PID から古い PID の順にリストされていることに注意してください。
これでは、それらのプロセスすべてを所有しているわけではない可能性があることが示されていません。pidof
は、誰が所有しているかに関係なく、一致する名前を持つすべてのプロセスを見つけることができます。出力をgrep
にパイプして詳しく見てみましょう。ps
で-e
(すべてのプロセスを選択) オプションと-f
(完全リスト) オプションを使用しています。
ps -ef | grep bash
2 つの bash プロセスはユーザー dave に属し、3 つ目はユーザー mary に属します。
1 つのアプリケーションが多くのプロセスを生成することがあり、それぞれが独自の PID を受け取ります。これは、Google Chrome で得られるものです。
pidof chrome
デフォルトでは、pidof
はすべてのプロセスについて報告します。必要に応じて、それらのプロセスの最新のものだけを要求できます。-s
(シングルショット) オプションはそのように機能します。
pidof -s chrome
kill
コマンドを使用してすべてのchrome
プロセスを手動で強制終了するのは面倒です。プロセスのリストを変数に取り込むと、その変数をkill
コマンドに渡すことができます。kill
コマンドはコマンドに複数の PID を受け入れることができるため、入力を受け入れてすべてのプロセスを強制終了します。
pid=$(pidof chrome)
echo $pid
kill $pid
pidof chrome
最初のコマンドはpidof
からの出力を収集し、pid
という名前の変数に割り当てます。画面にecho
する必要はありません。変数が保持している内容を示すためにそれを行っているだけです。
変数をkill
コマンドに渡し、pidof
をもう一度使用して、Chrome プロセスが残っているかどうかを確認します。すべてが強制終了されています。
pidof
の 1 つの癖は、シェルスクリプトの PID を返さないことです。スクリプトを実行しているbash
シェルの PID を返します。スクリプトを実行しているシェルを確認するには、-x
(スクリプト) オプションを使用する必要があります。
pidof -x sleep-loop.sh
ps -e | grep bash
pidof
は bash シェルの PID を返し、ps
は 2 つのシェルが実行されていることを示しています。1 つはpidof
コマンドを実行しているシェルで、もう 1 つはスクリプトを実行しているシェルです。
Linux で pgrep コマンドを使用して PID を見つける方法
pgrep
コマンドは、Linux でプロセス ID を取得する点でpidof
と少し似ています。ただし、検索手がかりと完全に一致するプロセスを見つけるだけでなく、名前が検索テキストを含むプロセスの PID も返します。
Firefox が実行されているコンピューターの例を次に示します。
pgrep firefox
pgrep fire
pgrep fox
pgrep refo
これらのコマンドはすべて Firefox プロセスを見つけ、PID を返します。ただし、次のコマンドを入力した場合:
pgrep refo
それ自体では、pgrep が Firefox を見つけたのか、preformd というデーモンを見つけたのかをどうやって知るでしょうか?
-l
(名前のリスト) オプションを追加すると、pgrep は PID の横にプロセス名もリストします。
pgrep refo -l
一致するプロセスのインスタンスが複数ある場合は、すべてがリストされます。
pgrep bash
pidof
の出力とは逆の順序である昇順でリストされていることに注意してください。古いプロセスから新しいプロセスへとリストされています。pidof
で見たように、リストされたプロセスはすべて必ずしもあなたのものではないことに注意してください。
-u
(ユーザー ID) オプションを使用すると、検索テキストと一致し、指定されたユーザーが所有するプロセスを検索できます。
pgrep bash -u dave
今回は結果に 3 つの bash プロセスが表示されます。もう 1 つはmary
によって使用されています。
pgrep bash -u mary
ユーザー名をコンマ区切りのリストとして連結できます。
pgrep bash -u dave,mary -l
そして、特定のユーザーのすべてのプロセスを表示するように要求できます。
pgrep -u dave -l
完全なコマンドラインを確認するには、-a
(完全リスト) オプションを使用します。
pgrep -u dave -a
PID の所有権について
すべてのシステムプロセスが root ユーザーによって所有されているわけではありません。もちろん、多くがそうであるものの、すべてがそうではありません。たとえば、このコマンドは機能します:
pgrep avahi-daemon
しかし、このコマンドは失敗します。
pgrep -u root avahi-daemon
root
がそのプロセスを所有していないため、失敗します。実際の所有者は「avahi」というシステムユーザーです。正しいユーザー名を使用すると、コマンドが機能します。
pgrep -u avahi avahi-daemon
注意すべき落とし穴です。
コメントする