Ubuntu 12.10 で core ファイルが作成されない

Ubuntu 12.10 でプログラムを走らせた時に segmentation fault と出力されるのに core ファイルが作成されませんでした。

ulimit -a コマンドで見てみると、

-c: core file size (blocks)    0

となっていて core ファイルのサイズの上限が 0 = core ファイルを作成しないようになっていたので、ulimit -c unlimited コマンドで core ファイルの上限を撤廃しました。

-c: core file size (blocks)    unlimited

そこでもう一度プログラムを走らせてみたところ、segmentation fault (core dumped) となり core ファイルを作成したようなメッセージなのですが、実際には作成されていません。

core(5) を見てみると、/proc/sys/kernel/core_pattern で core のファイル名を指定できるようになってるみたいなので、見てみました。

# cat /proc/sys/kernel/core_pattern 
|/usr/share/apport/apport %p %s %c

先頭が「|」で始まっているとコマンドを実行するみたいです。apport というコマンドが何をやってるのかはよくわかりませんが、/var/log/apport .log に次のように出力されていました。

ERROR: apport (pid 13004) Wed Jan  2 22:54:29 2013: called for pid 12996, signal 11, core limit 0
ERROR: apport (pid 13004) Wed Jan  2 22:54:29 2013: Unhandled exception:
Traceback (most recent call last):
  File "/usr/share/apport/apport", line 326, in <module>
    info.add_proc_info(pid)
  File "/usr/lib/python3/dist-packages/apport/report.py", line 498, in add_proc_info
    self['ProcMaps'] = _read_maps(int(pid))
  File "/usr/lib/python3/dist-packages/apport/report.py", line 88, in _read_maps
    maps = fd.read().strip()
  File "/usr/lib/python3.2/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 1226: ordinal not in range(128)
ERROR: apport (pid 13004) Wed Jan  2 22:54:29 2013: pid: 13004, uid: 1000, gid: 1000, euid: 0, egid: 0
ERROR: apport (pid 13004) Wed Jan  2 22:54:29 2013: environment: environ({})

なんとなく apport 自体が正常動作していないような雰囲気です。

よくわからないので apport を使用せず、core.PID ファイルを出力するように次のように設定しました。

# echo core.%p > /proc/sys/kernel/core_pattern

これでちゃんと出力されるようになりました。めでたしめでたし。