19. メンテナンス・トラブルシュート/プログラムダウン時に core を出力させる

 
19.1 問題
19.2 ulimit の値を見る
19.3 ulimit の値をテンポラリに変更する
19.3 ulimit の値をパーマネントに変更する

19.1 問題

 自分でつくったプログラムが
セグメントエラー (coreを出力しました)

 なんつう出力とともに落ちちゃったのです。

 で、core を使ってデバッグしようとしたら・・・。
 core がないわけです。

19.2 ulimit の値を見る

 B シェル系には ulimit というコマンドがありまして・・・。  これがリソースの制限をかけたり、表示したりというものです。  C シェル系では limitunlimit というコマンドになります。  FreeBSD では C シェル系でも ulimit というコマンドが使えます。
> ulimit -a

 で、現在のリソースの制限状態を見ることができます。

 複数行出てくると思いますが、先頭に

core file size

 と書いてある行が、core に対するリソース・出力ファイルサイズの制限値になります。

 このサイズが 0 になっていれば「coreを出力しました」というメッセージが出ても実際には出力されません。

 逆にこのサイズが unlimited になっていれば、ファイルサイズに関しては無制限に(実際にはディスクの物理的な制限はありますが)出力されます。

 ちなみにこの ulimit は内部コマンドでありまして、whichwhere で探しても見当たりません。

 Linux の場合、さらにややこしく、root ユーザ権限がないとコマンドが有効にならないため、一般ユーザで使用すると

> ulimit -a
ulimit: コマンドが見つかりません.

 てなことになりますし、sudo コマンドを使用しても

> sudo ulimit -a
sudo: ulimit: コマンドが見つかりません

 となりますので

> sudo /bin/bash -c 'ulimit -a'

 と入力することになります。/bin/bash の部分は、ulimit コマンドが有効なシェルであればなんでもかまいません。

19.3 ulimit の値をテンポラリに変更する

 テンポラリにこれを変更するには
> ulimit -c unlimited

 もしくは

> ulimit -c 数字

 を使用します。数字で入力する場合、単位がシステムによって異なることがありますので、unlimited の方がおすすめです。

19.4 ulimit の値をパーマネントに変更する

 FreeBSD に関しては、ハンドブックの「第13章 ユーザと基本的なアカウントの管理」「13.4. ユーザへの制限」を読めば大体わかるかと思います。  Linux の場合
/etc/security/limits.conf
 というファイルを編集します。  core を変更する場合は
#*               soft    core            0

 の先頭の「#」をはずして

#*               soft    core            unlimited

 に書き換えて、再起動します。