いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [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 システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本