!!!技術的雑談-アプリケーションのコアダンプを取る !!環境 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}} [[技術的雑談]]へ戻る