書式
ulimit [OPTIONS] [LIMIT]

概要

ulimit ビルトインは
シェルと子プロセスの
リソース使用量を
設定したり出力したりします。

LIMIT を指定すれば、
制限値をその値にし、
指定しなければ
現在の制限値を出力します。

以下のスイッチのひとつを使い、
取得・設定するリソースを
指定してください。

-c / --core-size
作成されるコアダンプのファイルの最大サイズ。
0に指定するとコアダンプしない。
-d / --data-size
データ領域の最大サイズ。
-f / --file-size
シェルが作成するファイルの最大サイズ。
-l / --lock-size
メモリーにロックできる最大サイズ。
-m / --resident-set-size
メモリー使用量の最大サイズ。
-n / --file-descriptor-count
ファイルディスクリプタの最大数。
(ほとんどのシステムでは設定できない)
-s / --stack-size
スタックの最大サイズ。
-t / --cpu-time
CPU時間の上限(秒数)。
-u / --process-count
ユーザひとりが起動できるプロセス最大数。
-v / --virtual-memory-size
仮想メモリー使用量の最大サイズ。

注意:すべてのOSで上記すべての
制限があるわけではありません。

制限値はは以下のどれかになります。

  • リソースによって定められた単位の数
  • hard (現在のハード制限)
  • soft (現在のソフト制限)
  • unlimited (無制限)

指定されたリソースの
LIMIT が与えられれば、
新しい制限値にします。

オプションを指定しなければ
-f (ファイルサイズ上限)
になります。

単位は以下の通りです。

  • -t は秒数
  • -n-u は単位なし
  • その他はキロバイト

以下の場合を除き、
終了ステータス は0となります。

  • 不正なオプションを指定したとき
  • 不正な引数を指定したとき
  • 新しい制限値を設定中にエラーが起きたとき

ulimit はまた、
設定する制限の種類を決定するために、
以下のオプションを受け付けます。

-H / --hard
ハードリミット
-S / --soft
ソフトリミット

ハードリミットは
減らすことしかできません。

一度設定されたら、
増やすことはできません。

一方、ソフトリミットは
ハードリミットまで
増やすことができます。

-H-S も指定しない場合は、
ソフトリミットとハードリミットを
新しい制限値に更新します。

現在のソフトリミットを出力します。

以下の追加のオプションを
受け付けます。

-a / --all
現在の全ての制限値を表示します。

fishの ulimit
bashと同じようにふるまいますが、
以下の3つの相異点があります。

  • 全オプションにおいて
    GNUスタイルの長いオプションを持つ。
  • パイプのサイズを得る
    -p オプションをサポートしていない。
    bashだとパイプへの書き込みと
    SIGPIPE を待つことによって
    経験的に推測された値を
    コンパイル時のチェックで設定している。
    パイプのサイズをこの方法で
    決定するのは信頼できないので、
    fishでは採用していない。
    bashのバージョンによって、
    bashで設定できてfishでは設定できない
    新たな制限値が出てくるかもしれない。
  • fishの ulimit はひとつのコマンドで
    複数の制限値を取得・設定できない。
    ただし、全ての制限値を出力する -a は除く。

実行例

スタックサイズのハードリミットを
64kBに設定する。

$ ulimit -Hs 64

最後までお読みいただき、ありがとうございました。参考になれば嬉しいです。