プロセスには“親と子”の関係があります。例えば、bashのプロンプトでpsを動かしている場合、“bashのプロセスが親”で“psのプロセスが子”になります。それぞれ「親プロセス」と「子プロセス」と表現します。
プロセスの親子の階層は、psコマンドの「f」または「--forest」オプションで表示することができます(画面4)。
ps af
(端末のプロセスを階層表示する)
それぞれの子プロセスは、親プロセスのIDも保持しています。「-o」オプションで表示してみましょう。
以下のコマンド例では、USERとPID、PPID(親プロセスのID)、そしてTTYとCOMMAND欄を表示しています(画面5)。
ps a -o user,pid,ppid,tty,command
(USER、PID、PPID、TTY、COMMANDを表示)
「ps a」で表示したプロセスは端末(TTY)があるものに限られていました。実際には、背後にもっとたくさんのプロセスが動いています。それらのプロセスも表示するには、「x」オプションを指定します。
ps ax
(全てのユーザー(a)の全てのプロセス(x)を表示する)
ps aux
(ユーザー情報なども含めて、全てのユーザーの全てのプロセスを表示する)
以下の実行画面では、先ほどと同じ「-o」オプションで、USERとPID、PPID(親プロセスのID)、そしてTTYとCOMMAND欄を表示しています(画面6、画面7)。また、情報量が多いので「more」コマンドも使用しました。
プロセスIDは1から割り振られており(※)、最初に動くプロセスは「1」です。CentOSの場合は、「systemd」が該当します。Ubuntuの場合、psコマンドでは「init」と表示されますが、「/sbin/init」はシンボリックリンクであり、実体はsystemdです。
【※】最大値は「32768」で、設定によって変更きます(設定値は「cat /proc/sys/kernel/pid_max」で確認可能)。最大値に達すると、再び1から順番に、その時点で使用されていないPIDが割り振られます。
プロセスIDは「p」または「-p」「--pid」オプションで指定できます。なお、「p」と「-p」「--pid」ではデフォルトの表示内容が変わります(※)。
【※】「p」はBSDスタイルのオプションです。BSDスタイルのオプションを使用した場合、デフォルトの表示内容は「PID」「TTY」「STAT(コマンドの状態)」「TIME(CPUの使用時間)」「COMMAND(引数付きのコマンド)」となります。「-p」はUNIXオプション、「--pid」はGNUロングオプションと呼ばれているスタイルで、「PID」「TTY」「TIME」「CMD(コマンド名)」が表示されます。
親のプロセスIDは「--ppid」オプションで表示できます(画面8)。
ps --pid プロセスID
(プロセスIDを指定して表示する)
ps --ppid プロセスID
(親プロセスのプロセスIDを指定して表示する)
Linuxのディレクトリはルート(/)からの“ツリー”となっていますが(連載第7回参照)、同じように、プロセスもPID=1、つまり最初に起動したプロセスからのツリーとなっています。 「ps axf」または「pstree」コマンドを使うと、全プロセスのツリーを表示できます(画面9)。
ps axf
(全てのプロセスを親子関係の情報付きで表示する)
pstree
(全てのプロセスをツリー状の図にして表示する)
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.