重要なポイント
Linux プロセスのプロセス ID を確認するには、「pidof examplename」のように pidof コマンドを使用します。 PID 名の一部しかわかっていない場合は、代わりに「pgrep examplenamefragment」を使用できます。 「examplename」と「examplenamefragment」を検索したい用語に置き換えます。
Linux プロセスを操作するということは、多くの場合、そのプロセス ID (PID) を知ることを意味します。これは、実行中のソフトウェアごとに与えられる固有の番号です。それが何であるかを調べる方法は 2 つあります。
Linux プロセス ID とは何ですか?
Linux は内部的に、プロセス ID または PID と呼ばれる一意の ID 番号を割り当てることで、実行中のプロセスを追跡します。実行中のすべてのアプリケーション、ユーティリティ、デーモンには 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 シェルの PID が 8304 であることを示しています。これは
ps
コマンドで確認できます。パラメータを指定せずに
ps
呼び出すだけです。現在のセッションで実行されているプロセスについてレポートします。
ps
ps
、それ自体を含む、検出できるすべてのプロセスについてレポートするため、
bash
プロセスと
ps
プロセスが実行中であることがわかります。ご想像のとおり、
bash
プロセスには
pidof
が報告したものと同じ PID があります。
複数の端末ウィンドウを開いている場合、
pidof
それらすべてについてレポートします。
ピドフバッシュ
PID は最高から最低の順、つまり最新のものから古いものへとリストされていることに注意してください。
これで分からないのは、あなたがこれらのプロセスすべての所有者ではない可能性があるということです。
pidof
プロセスの所有者に関係なく、一致する名前を持つすべてのプロセスを検索します。出力を
grep
にパイプして詳しく見てみましょう。
ps
で
-e
(すべてのプロセスを選択) オプションと
-f
(完全なリスト) オプションを使用しています。
ps -ef | grep bash
bash プロセスのうち 2 つはユーザー dave に属し、3 つ目はユーザー mary に属します。
場合によっては、1 つのアプリケーションが多数のプロセスを生成し、それぞれが独自の PID を受け取ることがあります。これは Google Chrome で得られるものです。
ピドフクロム
デフォルトでは、
pidof
すべてのプロセスをレポートします。必要に応じて、それらのプロセスの最新のものだけを要求することもできます。
-s
(シングルショット) オプションはまさにそれを行います。
pidof -s クロム
kill
コマンドを使用してすべての
chrome
プロセス
を手動で強制終了する
のは面倒です。プロセスのリストを変数にキャプチャすると、その変数を
kill
コマンドに渡すことができます。
kill
コマンドはコマンドで複数の PID を受け入れることができるため、入力を喜んで受け入れ、すべてのプロセスを強制終了します。
pid=$(クロムのpid)
$pidをエコーする
$pidを殺す
ピドフクロム
最初のコマンドは、
pidof
からの出力を収集し、それを変数に割り当てます。この変数に
pid
という名前を付けます。これを画面に
echo
必要はありません。変数が何を保持しているかを示すためにこれを行っているだけです。
変数を
kill
コマンドに渡し、もう一度
pidof
を使用して Chrome プロセスが残っているかどうかを確認します。彼らは全員殺されてしまった。
pidof
の特徴の 1 つは、シェル スクリプトの PID を返さないことです。スクリプトを実行している
bash
シェルの PID を返します。スクリプトを実行しているシェルを確認するには、
-x
(スクリプト) オプションを使用する必要があります。
pidof -x スリープループ.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 の火
pgrepフォックス
pgrep 参照
これらのコマンドはすべて、Firefox プロセスを見つけて PID を返します。ただし、次のコマンドを入力したとします。
pgrep 参照
pgrep が、たとえば p refor md という名前のダメオンではなく、Fi refo x を見つけたかどうかを、それ自体でどうやって知ることができるでしょうか?
-l
(リスト名) オプションを追加すると、pgrep は PID と一緒にプロセス名をリストします。
pgrep refo -l
一致するプロセスのインスタンスが複数ある場合は、それらがすべてリストされます。
pgrep bash
これらは昇順でリストされており、
pidof
からの出力とは逆の順序であることに注意してください。最も古いプロセスから新しいプロセスまでリストされます。
pidof
で見たように、リストされたプロセスのすべてが必ずしもあなたのものであるとは限りません。
-u
(ユーザー ID) オプションを使用すると、検索テキストに一致し、指定された
が所有するプロセスを検索できます。
pgrep bash -u dave
今回は、結果に 3 つの bash プロセスが表示されます。もう 1 つは
mary
によって使用されています。
pgrep bash -u メアリー
ユーザー名をカンマ区切りのリストとして文字列化できます。
pgrep bash -u dave、mary -l
また、特定のユーザーのすべてのプロセスを表示するように要求することもできます。
pgrep -u dave -l
完全なコマンドラインを表示するには、
-a
(完全なリスト) オプションを使用します。
pgrep -u dave -a
PID の所有権について
すべてのシステム プロセスが root ユーザー によって所有されているわけではありません。もちろん、多くはそうなりますが、すべてではありません。たとえば、次のコマンドは機能します。
pgrep avahi デーモン
しかし、このコマンドは失敗します。
pgrep -u root avahi-daemon
root
そのプロセスを所有していないため、失敗します。実際の所有者は「avahi」というシステムユーザーです。正しいユーザー名を使用すると、コマンドは機能します。
pgrep -u avahi avahi デーモン
ちょっとした注意が必要です。





