[バックナンバーのトップへ]
[Linux システム管理のトップへ]
いますぐ実践! Linux システム管理 / Vol.024 / 読者数:451名
こんばんは,うすだです.
最近,自前で使っているノートパソコンが,突然固まるようになってしまいました.
特に前触れもなく,突然固まります.ネットワークも無応答になります.
こうなると,もうリセットボタンを押すしかないですよね.
昔ですと,ファイルシステムが壊れませんように…
などと祈りを唱えながらリセットしていました.
今は,ext3 や JFS など,ジャーナリングしてくれるのが当たり前になりましたので,
仕方ないな〜という程度の気持ちでリセットボタンを押しています.
技術の進歩はすばらしいのですが,それにちっとも感謝していない自分がいます.
きっと,そのうち痛い目に会うのではないか…と思います.
痛い目に会ったら,ここで報告したいと思います.
(期待して,待っていてください.;-p)
それでは,今日も,はりきってまいりましょう!
今週のお題 - /proc/プロセスID を探検する
すみません.申し訳ありません.最初に謝っておきます.
宿題の答えを書いていたら,いつになく膨大になってしまいました.
今週のネタも考えてあったのですが,
宿題の答えの方がかなり長くなってしまいましたので,今週は,思いきって,
宿題の答えを本題にしてみようと思います.
さて,先週の宿題は,
何らかの動作し続けるコマンドを実行し,/proc/プロセスID/ 以下を
探検してみましょう
でした.
まず,監視対象のプログラムを起動します.(先週書いた例です.)
% cat /dev/zero > /dev/null &
[1] 1726
…今気づきましたが,こいつは走りっぱなしになりますので,
あまりいい例じゃありませんでした.
負荷の1つや2つ気にしないぜーという太っ腹な方はさておき,
ちょっとでも気になる方は,
% sleep 365d > /dev/null &
でもよろしいのではないかと思います.
さて,それでは,一気にご紹介したいと思います.
- /proc/プロセスID/cmdline
起動した時の,プログラム自身とその引数がわかります.
以下のように確認すると,引数同士を NULL で区切っていることがわかります.
% od -t x1 -c /proc/1726/cmdline
0000000 63 61 74 00 2f 64 65 76 2f 7a 65 72 6f 00
c a t \0 / d e v / z e r o \0
- /proc/プロセスID/cwd
起動した時の,カレントディレクトリのシンボリックリンクです.
- /proc/プロセスID/environ
起動した時の,環境変数の一覧がわかります.
これも,各環境変数を NULL で区切っています.
% od -t x1 -c /proc/1726/environ |head
0000000 4e 4e 54 50 53 45 52 56 45 52 3d 6c 6f 63 61 6c
N N T P S E R V E R = l o c a l
0000020 68 6f 73 74 00 48 54 54 50 5f 48 4f 4d 45 3d 66
h o s t \0 H T T P _ H O M E = f
...後略
- /proc/プロセスID/exe
起動したプログラムのシンボリックリンクです.
- /proc/プロセスID/fd/
オープンしているファイルのディスクリプタがわかります.
標準出力をリダイレクトしているので,1 は /dev/null を差しています.
% ls -o /proc/1726/fd
合計 0
lrwx------ 1 usu 64 Aug 21 02:42 0 -> /dev/pts/3
l-wx------ 1 usu 64 Aug 21 02:42 1 -> /dev/null
lrwx------ 1 usu 64 Aug 21 02:42 2 -> /dev/pts/3
lr-x------ 1 usu 64 Aug 21 02:42 3 -> /dev/zero
lrwx------ 1 usu 64 Aug 21 02:42 5 -> /dev/pts/3
- /proc/プロセスID/maps
ユーザ空間にマップされているものがわかります.
共有ライブラリのアドレスがわかると,
デバッグ時などの際にうれしいときもありますが,普通は気にしなくていいと思います.
% cat /proc/1726/maps
08048000-0804b000 r-xp 00000000 03:02 2109590 /bin/cat
0804b000-0804c000 rw-p 00003000 03:02 2109590 /bin/cat
0804c000-0806d000 rwxp 00000000 00:00 0
40000000-40014000 r-xp 00000000 03:02 2113334 /lib/ld-2.3.3.so
40014000-40015000 rw-p 00013000 03:02 2113334 /lib/ld-2.3.3.so
...後略
- /proc/プロセスID/mem
そのプロセスの,メモリ空間そのものを差すようです.
だたし,ptrace しているプロセスしか,参照できないようです.
(曖昧ですみません…気軽に試せる方法を,思いつきませんでした.)
- /proc/プロセスID/mounts
/proc/mounts と同じではないかと思います.
存在意義がよくわかりません.ご存知の方は,ご教示ください.
- /proc/プロセスID/root
ルートディレクトリのシンボリックリンクです.
chroot でルートディレクトリを変更していると,その箇所を差します.
- /proc/プロセスID/stat
プロセスの情報や状態がわかります.
% cat /proc/1726/stat
1726 (cat) R 3149 1726 3149 34819 2614 0 29 0 107 0 79485 213128 \
0 0 15 0 0 0 19737458 4530176 104 4294967295 134512640 134524623 \
3221222752 3221222360 1074729272 0 0 536870912 0 0 0 0 17 0
…たくさんありますね.
先頭から,プロセスID,コマンド名,プロセスのステータス(R なので running),
親プロセスのID,プロセスグループID…以下省略…です.
- /proc/プロセスID/statm
プロセスのメモリの状態がわかります.
% cat /proc/1726/statm
105 104 93 4 0 100 11
先頭から,トータル,メモリ上に存在する分,共有している分,コード,
ライブラリ,データ,ダーティなページ数を表しています.
(1ページは,x86 の場合 4096 バイトです.)
- /proc/プロセスID/status
stat や statm の出力を,要約してややわかりやすく見せてくれます.
(厳密には,内容が一部異なります.)
% cat /proc/1726/status
Name: cat
State: R (running)
Tgid: 1726
Pid: 1726
PPid: 3149
...後略
以上,先週に引続いて,/proc のネタをご紹介しました.
(システム管理とは直接関係のなさそうな情報もありますが…)
カーネル・ソースをお持ちの方は,fs/proc/array.c を一度見てみてください.
proc_pid_ファイル名() が,それぞれのファイルを参照したときに呼ばれる関数です.
(mounts や mem など,そうでないものもありますが….)
厳密に知りたい方は,ドキュメントを探すよりも,ソースを見た方が確実だと思います.
詳しく知る必要のある方は,是非ソースをご覧ください.
今週の宿題
今週の宿題は,こちらです.
あるディレクトリ以下にいるプロセスを見つけてください
です.
NFS mount しているのを umount しようとすると,
誰かが使用中のために umount できないことがあります.
(大学の研究室にいた頃,よくありました.)
そんなとき,誰が使っているのかがわかると,便利ですよね.
厳密には,すべてを洗い出すのは難しいと思いますが,/proc/プロセスID の
cwd や fd あたりを探れば,結構な確率で捜し出せるのではないか,
と思っています.
あとがき
今週末は,ゴッホ展へ行ったり,
子ども向けのデザインのワークショップに参加したりで,芸術三昧しておりました.
ゴッホも,ワークショップで説明をされていた方も,
何らかの強烈な想いにつき動かされて,芸術に身を投じているということと,
勉強家だというところが,共通点しているという印象を受けました.
ワークショップをされていた方は,貧しい国の子ども達のために,
簡単に作ることのできるおもちゃを考えたり,目の見えない子ども達のために,
音の出るおもちゃを考えたりされていました.
お願いされた仕事だけをこなしていたり,
毎週発行しなければという義務感だけでメルマガを出していたりする自分に気づき,
いろいろと考えさせられました.
なんのために仕事をしているのか,なんのためにメルマガを出しているのか,
よーく考えてみたいと思います.
…なんだか,地味な話ですみません.
さらさらさらっと,読み流してください.
さて,来週は,ちゃんと新しいネタで勝負したいと思います.
ですが,こんな話をしてほしいとか,こんなことで困っているなど,
ありましたら,ご連絡ください.感想なども,お待ちしております.
(このメールに返送すれば,私に届きます.)
今週も,ここまで読んでいただき,ありがとうございました.
それでは,また来週,お会いしましょう!
「いますぐ実践! Linux システム管理」の解除は,以下からどうぞ.
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)
バックナンバーは,こちらにほぼ全部そろっています.
http://www.usupi.org/sysad/backno.html
「栗日記」−栗の絵描いてます.みてくださいー.
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
[バックナンバーのトップへ]
[Linux システム管理のトップへ]
|