昔のメールを利用してお伺いします。
最近のopenSUSE 13.1で、任意のプロセスがシグナル受信時に
coreを吐くようにするにはどうすればよいでしょうか?
2013年2月25日 13:37 Fuminobu TAKEYAMA
(2013/02/25 12:14), 1xx wrote:
2013年2月25日 8:02 Yasuhiko Kamata
: 上記をダイレクトに回答すると、 "/etc/security/limits.conf" 内に "* soft core unlimited" という行を追記してシステムを再起動すると、 coreファイルを吐く (= "ulimit -c" で "unlimited" になる) ように なります (openSUSEだけでなく、他のLinuxでも使える方法です) 。
ただし、このままだとプロセス実行時のカレントディレクトリに出力されて しまうので、 "echo /var/crash/core.%e.%u.%t > /proc/sys/kernel/core_pattern" のように出力先のテンプレートを設定しておくと、もっと便利になるでしょう (ただしこちらはシステムを再起動すると元に戻ってしまいます)。
回答ありがとうございます。 合わせ技で/etc/sysctl.d/にファイルを作ることで ブート時に自動的に/var/crash/へcoreを吐くよう設定を変更することにしました。
以前、openSUSEやLinuxでcore file sizeをunlimitedにした状態で
起動する方法を教わりました。
しかし昨日になって気づいたのですが、openSUSE 13.1の最近の版では
/etc/security/limits.conf
/proc/sys/kernel/core_pattern
をいじっただけではcore file sizeが0のままになることに気付きました。
(core_patternの方は変更されています。)
どこでcore file sizeを0にしているのか
egrep -R ulimit /etc
としても解らなかったので、仕方なく/etc/profileの中で
ulimit -Sc unlimited
して、リブートしたのですが、まだcore file sizeが0のままでした。
/etc/profileの冒頭には「DO NOT EDIT」とあったので、これを(etckeeper+gitで)
元に戻し、仕方なく~/.bashrcに
ulimit -Sc unlimited
と記述しました。
これでユーザのbashから起動したプロセスはdebug可能になったのですが、
その他のプロセスはcoreを吐けません。
例えばKDE DesktopからFirefoxを起動し、SIGABRTを送ってもcoreを吐きません。
openSUSE 13.1をインストールした当初は上記の設定だけで、
任意のプロセスがシグナルでcoreを吐いていたと記憶しているので、
途中で仕様が変わったのだと思います。
「openSUSE core」などで検索しても、いっぱいヒットするのですけど、
それらしい情報は得られませんでした。
最近のopenSUSE 13.1で、任意のプロセスがシグナル受信時に
coreを吐くようにするにはどうすればよいでしょうか?
--
1xx