Linuxゲリラ戦記

プロセスをツリー上に表示する。

左を向いているペンギンみたいなキャラクター、ナックス

10.現在動いているプログラムを全て表示。pstreeコマンド

ナックス「Linuxユーザーとしては、現在どんなプログラムが動いているのか、つまりプロセスの状況を知るのは大事です」

デビー君「なんで?」

ナックス「いや……だって、今使っている自分のパソコンで訳の分からないプログラムが動いていたら嫌じゃないデスか?」

デビー君「全然」

ナックス「え……。いや……。え……」

デビー君「いいかい、ナックス。僕は初心者ユーザーだ。パソコンなんて、本当にどういう仕組みで動いているかなんて全く分からない。でも、動いてる。それでいいじゃないか」

ナックス「え……でも……え?」

デビー君「飛行機がどういう原理で空を飛ぶのかも知らない。でも、飛んでる。宇宙がどうやって誕生したかなんて知らない。でも、そこに存在する。人が、なぜ恋をするのか僕は知らない。でも、僕は最近、どうやら同じクラスのあの赤いメガネの女の子のことを──」

ナックス「黙れ青春コゾウ!」

デビー君「!?」

ナックス「さぁ、青春コゾウは放っておいて、皆さんは私と一緒に現在のプロセスの状況を知るコマンドを学びましょう。CUI環境を立ち上げて、次の様にコマンドを打ちましょう」

$ pstree

ナックス「結果は以下のようなものになります(環境によって異なります)」

init─┬─NetworkManager───2*[{NetworkManager}]
     ├─NetworkManagerD
     ├─acpid
     ├─anacron───run-parts───apt───sleep
     ├─apache2───5*[apache2]
     ├─atd
     ├─avahi-daemon───avahi-daemon
     ├─bonobo-activati───{bonobo-activati}
     ├─cron
     ├─cupsd
     ├─2*[dbus-daemon]
     ├─dbus-launch
     ├─dhcdbd───dhclient
     ├─exim4
     ├─firefox-bin───5*[{firefox-bin}]
     ├─gconfd-2
     ├─gdm───gdm─┬─Xorg
     │     └─x-session-manag─┬─Xsession───uim-toolbar-gtk
     │                 ├─bluetooth-apple
     │                 ├─gnome-panel
     │                 ├─gnome-settings-───{gnome-settings-}
     │                 ├─kerneloops-appl
     │                 ├─metacity
     │                 ├─nautilus
     │                 ├─nm-applet
     │                 ├─2*[python]
     │                 ├─seahorse-agent
     │                 ├─system-config-p
     │                 ├─uim-xim
     │                 ├─update-notifier
     │                 └─{x-session-manag}
     ├─6*[getty]
     ├─gnome-keyring-d
     ├─gnome-power-man
     ├─gnome-screensav
     ├─gnome-terminal─┬─bash───vim
     │          ├─bash───pstree
     │          ├─gnome-pty-helpe
     │          └─{gnome-terminal}
     ├─gnome-vfs-daemo
     ├─gnome-volume-ma
     ├─hald───hald-runner─┬─hald-addon-acpi
     │        ├─hald-addon-cpuf
     │        ├─hald-addon-inpu
     │        └─hald-addon-stor
     ├─hcid
     ├─kerneloops
     ├─mapping-daemon
     ├─mixer_applet2───{mixer_applet2}
     ├─portmap
     ├─rpc.statd
     ├─rsyslogd───2*[{rsyslogd}]
     ├─system-tools-ba
     ├─udevd
     └─uim-helper-serv

デビー君「なんだこれは?」

ナックス「これは、実行中の全てのプロセス、つまりプログラムを表示したものです。以前に教えたディレクトリの階層表現を覚えているでしょうか?あれと似たような見方です。Linuxでは全てのプロセスに親子関係があります」

デビー君「親子関係?」

ナックス「そうです。子プロセスは、親プロセスが動いていないと、そもそも動けません」

デビー君「へー。っていうことは全てのプロセスのボスはinitっていう名前のプロセス?」

ナックス「そうです。Linuxの全てのプログラムはinitプログラムの子供です。initこそ偉大なる母!」

ナックス「さて、pstreeコマンドはpstreeコマンドが実行された時点でのプロセスを表示するものです。つまり、pstree自身も表示されています。どこにpstreeが表示されているか分かりますか?」

デビー君「えーっと、initプロセスの子供のgnome-terminalプロセスの子供のbashプロセスの子供だ!」

ナックス「そうです。ちなみに、ディストリビューションごとにpstreeプロセスがどのプロセスの子供かは異なります。そうそう、bashプロセスの説明もサラリとしておきましょう」

デビー君「バッシュといえば、バスケットシューズの略だよね!?」

ナックス「いいえ。違います。bashとは、Linuxの多くのディストリビューションで標準のCUI環境に採用されているプログラムです」

デビー君「ふーん」

ナックス「しかし、bashと似たようなプログラムでcshやzshなどを採用しているディストリビューションもあります」

デビー君「ん?なんか全部、shが名前に付くね」

ナックス「そうです。shは『shell』の意味です」

デビー君「シェル?」

ナックス「そう。シェルは、分かりやすく言えばCUI環境の事です。CUI環境は全てのLinuxディストリビューションで必ず使える、つまり、全てのLinuxには必ずシェルがあるということです!」

デビー君「シェルってなんだか、ゲームのラスボスみたいな名前だね!」

ナックス「黙れゲームコゾウ!」

デビー君「!?」

ナックス「さて、次回はpsコマンド(11.現在実行されているプロセスを表示。psコマンド)!」