Articles

LinuxでプログラムのプロセスIDを見つける9つの方法

Linuxシステムで作業するとき、どのプロセスが実行されているか、どのPIDまたはPPIDがそれに結びついているかを把握する必要があることがあります。 それは多くの目的に使用することができます。

基本的に、LinuxでPIDを検索して応答しないプログラムを強制終了しますが、これはGUIタスクマネージャーで実行できますが、応答しないプログラムを処理する最も効率的な方法はCLIです。

GUIベースのツールがまだ実行中の隠されたプロセスを表示しないことがあるため、これはGUIよりも優れています。,

このチュートリアルでは、Linuxでさまざまな方法で実行されているプログラムのプロセスID(PID)を見つける方法を示します。

プロセスID(PID)とは何ですか

PIDは、Linux、Unix、MacOS、Windowsなどのほとんどのオペレーティングシステムカーネルで一般的に使用されるプロセスIDを指します。

これは、各プロセスが作成されるときに自動的に割り当てられる一意のIDです。 プロセスは、プログラムの実行中のインスタンスです。

親プロセスID(PPID)とは

親プロセスは、一つ以上の子プロセスを作成したプロセスです。, 各子プロセスには親プロセスID(PPID)が与えられ、親プロセスは操作が完了すると子プロセスを強制終了します。

これらはこのトピックに関連しているので、あなたは、以下の記事を読むことに興味があるかもしれません。

  • プロセスがLinuxで使用しているポート番号を調べる方法
  • Linuxでプロセスを強制終了または終了する3つの簡単な方法

プロセスIDがinitを除くすべてのプロセスに変更されるたびに。 initは常にシステムの最初のプロセスであり、他のすべてのプロセスの祖先です。 それはPID1を保持します。,

Pidのデフォルトの最大値は32,768です。 これは、コンピューターで次のコマンドを実行することで確認できます

cat /proc/sys/kernel/pid_max

32,76832ビットシステムでは最大値ですが、2^22(約4万)までの任意の値に設定できます64ビットシステムで。

あなたは尋ねることができます、なぜそのようなサイズのPidが必要なのですか? これは、Pidをすぐに再利用することができず、潜在的なエラーを防ぐためです。,PIDOFコマンド、pgrepコマンド、psコマンド、pstreeコマンド、ssコマンド、netstatコマンド、lsofコマンド、fuserコマンド、systemctlコマンドなど、システム上で実行されているプロセスのPIDを

これは、以下の九つの方法を用いて達成することができる。

  • pidof:pidof-実行中のプログラムのプロセスIDを検索します。
  • pgrep:pgre–名前やその他の属性に基づいてプロセスをルックアップまたはシグナル伝達します。,
  • ps:ps-現在のプロセスのスナップショットを報告します。
  • pstree:pstree-プロセスのツリーを表示します。
  • ss:ssはソケット統計をダンプするために使用されます。
  • netstat:netstatは、開いているソケットのリストを表示します。
  • lsof:lsof-開いているファイルをリストします。,
  • fuser:fuser–一つ以上のファイルを開いているすべてのプロセスのプロセスIdをリストします
  • systemctl:systemctl-systemdシステムとサービスマネージャを制御します

これを証明するために、ApacheプロセスIDを見つけます。 弊社の代わりにプロセス名を必ず入力してください。

1)Pidofコマンドを使用してLinuxでプロセスID(PID)を見つける方法は?

pidofコマンドは、実行中のプログラムのプロセスIDを見つけるために使用されます。 これらのIdを標準出力に出力します。, これを実証するために、システム内の’Apache2’プロセスidを見つけます。

# pidof apache2
2594 2365 2364 2363 2362 2361

上記の出力では、プロセス名に対してすべてのPid(親と子を含む)を表示するため、プロセスIDを識別するのが困難な場合があります。したがって、親プロセスPID(PPID)を見つける必要があります。 これが最初の番号になります。 私の場合は3754であり、降順でソートされています。p>

2)pgrepコマンドを使用してLinuxでプロセスID(PID)を検索する方法は?,

pgrepコマンドは、現在実行中のプロセスを検索し、選択基準に一致するプロセスIdを一覧表示します。

# pgrep apache2236123622363236423652594

上記の出力は’pidof’コマンドの出力に似ていますが、結果を昇順にソートしました。last.In 私の場合は3754です。,

注意:親プロセスIDを識別することは、’pidof’&’pgrep’コマンドを使用するときに問題になる可能性があります。

3)pstreeコマンドを使用して、LinuxでプロセスID(PID)を見つける方法は?

pstreeコマンドは、実行中のプロセスをツリーのような形式で表示し、プロセス階層を表示するのに非常に便利な方法であり、出力をより視覚的に魅, Pstreeコマンドでユーザー名が指定されている場合、対応するユーザーが所有するすべてのプロセスが表示されます。

pstreeは、同じブランチを角かっこで囲み、繰り返し数の前に付けることによって、同じブランチを視覚的にマージします。

# pstree -p | grep "apache2" |-
-+-apache2(2361) | |-apache2(2362) | |-apache2(2363) | |-apache2(2364) | |-apache2(2365) | `-apache2(2594)

親プロセスのみを取得するには、次の形式を使用します。

# pstree -p | grep "apache2" | head -1 |-
-+-apache2(2361)

‘pstree’コマンドは、’pidof’よりもはるかに優れています&’pgrep’コマンドは、それらでは不可能な親プロセスと子プロセスを分離するためです。,

4)psコマンドを使用してLinuxでプロセスID(PID)を見つける方法は?

psコマンドは、プロセスID(pid=PID)、プロセスに関連付けられた端末(tname=TTY)、hh:mm:ss形式の累積CPU時間(time=TIME)、実行可能名(ucmd=CMD)を含むアクティブプロセスの選択 出力紙によるデフォルトです。

親プロセスID(PPID)は、上記の出力からプロセス開始日に基づいて容易に識別することができる。, 私たちの場合、’Apache2’プロセスはDecember 11thで開始されました。 Apache2のPIDは3754です。

5)ssコマンドを使用してLinuxでプロセスID(PID)を見つける方法は?

ssコマンドは、ソケット統計をダンプするために使用されます。 Netstatと同様の情報を表示することができます。 他のツールよりも多くのTCPおよび状態情報を表示できます。パケット、TCP、UDP、DCCP、RAW、Unixドメインなど、あらゆる種類のソケットの統計を表示できます。,

# ss -tnlp | grep apache2LISTEN 0 128 :::80 :::* users:(("apache2",pid=3319,fd=4),("apache2",pid=3318,fd=4),("apache2",
,fd=4))

6)netstatコマンドを使用してLinuxでプロセスID(PID)を見つけるにはどうすればよいですか?

netstatコマンドを使って印刷されていネットワーク接続ルーティングテーブル、インターフェイス統計、マスカレード接続とマルチキャストの会員. 既定では、netstatは開いているソケットのリストを表示します。

アドレスファミリを指定しない場合、構成されているすべてのアドレスファミリのアクティブなソケットが出力されます。 このプログラムは廃止された。 Netstatの置き換えはssです。

# netstat -tnlp | grep apache2tcp6 0 0 :::80 :::* LISTEN 

7)lsofコマンドを使用してLinuxでプロセスID(PID)を見つけるにはどうすればよいですか?,

lsofコマンドは、開いているファイルを一覧表示するために使用されます。 Linux lsofコマ

8)fuserコマンドを使用してLinuxでプロセスID(PID)を見つける方法は?

fuserユーティリティは、一つ以上の名前付きファイルが開かれているローカルシステム上で実行されているプロセスのプロセスIdを標準出力に書き

# fuser -v 80/tcp USER PID ACCESS COMMAND80/tcp: root 
www-data 3318 F.... apache2 www-data 3319 F.... apache2

9)systemctlコマンドを使用してLinuxでプロセスID(PID)を見つけるにはどうすればよいですか?

systemctlコマンドは、systemdサービスマネージャを制御するために使用されます。, これは古いSysVinitシステム管理の代替であり、最新のLinuxオペレーティングシステムのほとんどはsystemdに移行されています。