トップ 一覧 検索 ヘルプ RSS ログイン

技術的雑談-アプリケーションのコアダンプを取るの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!技術的雑談-アプリケーションのコアダンプを取る

!!環境
Linux Fedoracore3で確認

!!目的
指定したプロセス(アプリケーション)のdump(core)をshell scriptなどから取得する

!!方法
UNIXで実行中のプロセス(≒プログラム)のメモリーダンプをデバッグなどの用途で取りたい場合、UNIX標準の以下のコマンドを使えば取得できます。

 gcore -s -c [ダンプの保存先ファイル名] [pid]
  [ダンプの保存先ファイル名] -- メモリー状態のファイルをどこに出力するか 
  [pid] -- メモリダンプを取りたいプロセスのプロセスID

尚、-sは「プロセスを一時停止し、コアダンプ取得後に再開する」というオプションです。

プロセスID(pid)は

+「ps」コマンドで探す 
+/proc/〜 以下を探す 
+/var/run/〜 以下を探す

の方法で取得できます。 (多分psコマンドで探すのが人間の一般、プログラムが特定できている場合は/var/run以下で探すのがshell scriptでの一般)

ちなみに、psコマンドを叩くと、そのユーザ権限で起動しているプロセスの一覧が表示されます。

 [ahouser@localhost ~]$ ps
   PID TTY          TIME CMD
 10204 pts/1    00:00:00 bash
 10245 pts/1    00:00:00 ps
 [ahouser@localhost ~]$

また、「ps ax」とやると、そのマシン全体のプロセス一覧が取れます。

同じく、/var/runの様子の例は

 [ahouser@localhost run]$ ls -l
 合計 100
 -rw-r--r--    1 root     root            5  5月 13 10:09 apmd.pid
 -rw-r--r--    1 root     root            5  5月 13 10:12 atd.pid
 drwxr-xr-x    2 root     root         4096  5月 13 10:13 console
 -rw-------    1 root     nwops           9  5月 13 10:13 console.lock
 -rw-r--r--    1 root     root            5  5月 13 10:12 crond.pid
 drwxr-xr-x    2 root     root         4096  5月 13 10:12 dbus
 -rw-r--r--    1 root     root            5  5月 13 10:12 gdm.pid
 -rw-r--r--    1 root     root            5  5月 13 10:12 gpm.pid
 -rw-------    1 root     root            5  5月 13 10:08 klogd.pid
 -rw-r--r--    1 root     root            5  5月 13 10:12 messagebus.pid
 drwxrwx---    2 named    named        4096 10月 18  2003 named
 drwxrwxr-x    2 root     root         4096 10月 29  2003 netreport
 -rw-r--r--    1 root     root            4  5月 13 10:09 ntpd.pid
 -rw-r--r--    1 rpcuser  rpcuser         5  5月 13 10:09 rpc.statd.pid
 drwxr-xr-x    2 root     root         4096 10月 24  2003 saslauthd
 -rw-------    1 root     smmsp          33  5月 13 10:11 sendmail.pid
 -rw-r--r--    1 smmsp    smmsp          50  5月 13 10:12 sm-client.pid
 -rw-r--r--    1 root     root            5  5月 13 10:09 sshd.pid
 drwx------    5 root     root         4096  3月 23 15:47 sudo
 -rw-------    1 root     root            5  5月 13 10:08 syslogd.pid
 -rw-rw-r--    1 root     utmp        11136  5月 15 17:25 utmp
 -rw-r--r--    1 root     root            6  5月 13 10:12 xfs.pid
 -rw-r--r--    1 root     root            5  5月 13 10:09 xinetd.pid
 [ahouser@localhost run]$

です。 UNIXの礼儀正しいプログラミングスタイルで書かれたプログラム(主に、マシンで1つだけ起動されていることが望まれるデーモンなど)は/var/runに「自分の名前.pid」というテキストファイルに自分のプロセスIDを書き込んで起動します。

/proc/以下で探す方法は良くわかりませんが、cd /procしてlsで見ると、プロセスIDでディレクトリが掘れています。その下に「cmdline」というファイルがあるので、その中身がそのプロセスのプログラム名っぽいです。
(まあ、あんまり使わないと思われますので省略)


!!履歴
2005/7/14 -- 初版

[[技術的雑談]]へ戻る

!!突っ込み
{{comment}}

[[技術的雑談]]へ戻る

{{trackback}}

[[技術的雑談]]へ戻る