web-dev-qa-db-ja.com

ulimitを使用したコアファイルサイズ

私の質問はおそらくUbuntuとは特に関係ないでしょうが、デスクトップがこのOSを実行しているので、このフォーラムに来ました。

次のようにulimit -cコマンドを使用してコアファイルのサイズを変更しようとしています。

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

制限の変更:

$ ulimit -c unlimited

結果を観察する:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7959
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

実際、制限は変更されています。ただし、別のターミナルを開いて値を確認しても、コアファイルサイズにゼロ値が表示されます。

質問:

  1. ulimitコマンドを使用して行った変更は、現在のプロセス、つまりこの場合はbashのみに影響しますか?
  2. シェルからフォアまたはバックグラウンドプロセスとしてプログラムを起動します。 ulimitの変更は新しいプロセスに適用されますか?
  3. この構成ですべてのユーザープロセスが影響を受けるようにするにはどうすればよいですか?
10
maximb

ulimitは組み込みのシェルであるため、現在のシェル、およびそのシェルによって開始されたプロセスのみに影響します。

$ type ulimit
ulimit is a Shell builtin

man ulimit から:

The  ulimit  utility  shall  set  or report the file-size writing limit
imposed on files written by the Shell and its child processes (files of
any  size  may be read). Only a process with appropriate privileges can
increase the limit.

そのため、はい、子プロセスが影響を受けます。

永久にまたはすべてのプロセスに制限を設定するには、 /etc/security/limits.conf を編集して再起動します。マンページの例はかなり良いです。次のようなものを追加するだけです。

username - core unlimited
9
muru