web-dev-qa-db-ja.com

Macで永続的なシェルulimit設定を追加する方法

再起動時にデフォルトでコアダンプの生成を有効にしたい。

実行中:

ulimit -c unlimited

端末でコンピュータが再起動されるまで動作するようです。

9
Jason

うまくいくものを見つけたと思います。

LaunchControl というプログラムを使用して、enable core dumps.plist/System/Library/LaunchDaemonsというファイルを作成し、次の内容を含めました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>GroupName</key>
    <string>wheel</string>
    <key>InitGroups</key>
    <true/>
    <key>Label</key>
    <string>core dumps launchctl</string>
    <key>ProgramArguments</key>
    <array>
        <string>launchctl</string>
        <string>limit</string>
        <string>core</string>
        <string>unlimited</string>
        <string>unlimited</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>root</string>
</dict>
</plist>

これらの権限を持つ:

$ ls -al enable\ core\ dumps.plist 
-rw-r--r--  1 root  wheel  582 Dec 30 15:38 enable core dumps.plist

そしてこれはトリックをするように見えました:

$ launchctl limit core
    core        unlimited      unlimited 
$ ulimit -a core
core file size          (blocks, -c) unlimited
...
<output snipped>
...

クラッシュするだけの小さなテストプログラムを作成しました。

$ ./a.out 
Segmentation fault: 11 (core dumped)

そして、ほら、コアダンプが生成されました:

$ # ls -al /cores/
total 895856
drwxrwxr-t@  3 root  admin        102 Dec 30 15:55 .
drwxr-xr-x  31 root  wheel       1122 Oct 18 10:32 ..
-r--------   1 root  admin  458678272 Dec 30 15:55 core.426
4
Jason

永続的なシェル制限を適用するには、それぞれのスタートアップシェルファイルにulimitコマンドを追加する必要があります。

個々のユーザーの場合、次を使用します:~/.bashrcまたは~/.bash_profileファイル。

すべてのユーザーに対して、次を使用します:/etc/bashrcファイル。

追加する推奨行:

# Changes the ulimit limits.
ulimit -Sn 4096      # Increase open files.
ulimit -Sl unlimited # Increase max locked memory.

launchctlを介してシステムリソースの制限を変更するには、次を参照してください。 macOSでulimit設定を保持する方法

0
kenorb