- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!技術的雑談-アプリケーションのコアダンプを取る
!!環境
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}}
[[技術的雑談]]へ戻る