如何在 Mac 上添加持久 shell ulimit 设置?

如何在 Mac 上添加持久 shell ulimit 设置?

我想在重新启动时默认启用核心转储生成。

执行:

ulimit -c unlimited

在终端中似乎可以工作,直到计算机重新启动。

答案1

我想我找到了一些有用的东西。

我使用了一个名为启动控制创建一个名为enable core dumps.plistat 的文件/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

答案2

要应用持久 shell 限制,您需要将ulimit命令添加到相应的启动 shell 文件中。

对于个人用户,请使用:~/.bashrc~/.bash_profile文件。

对于所有用户,请使用:/etc/bashrcfile。

建议添加的行:

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

要通过 更改系统资源限制launchctl,请参阅:如何在 macOS 中保留 ulimit 设置?

相关内容