我想通过C程序调用ulimit shell命令。现在,我有:
execlp("ulimit", "ulimit", "-u", "%d", ulimit_a);
ulimit -a
它编译得很好,但当我稍后检查它时(破折号和 bash 版本),实际上并没有编辑用户 ID 最大进程值。同样的情况system()
也发生了,但这似乎是一个已知问题system()
答案1
shellulimit
命令仅适用于当前 shell 及其后代。它是一个内置命令,而不是一个单独的命令。
您无法启动单独的 shell 进程、ulimit
在其中运行并期望它对父进程产生任何影响。
在 C 中,您应该使用getrlimit(2)
和setrlimit(2)
函数来获取和设置当前进程及其后代的资源限制。不过,从你的做法来看,我猜他们不会这么做你也期望他们这样做。
答案2
看一下pam_limits
,一个 PAM(可插入身份验证模块)模块,用于在创建用户会话时设置资源限制。您必须配置 PAM 才能使用此模块,然后必须在/etc/security/limits.d/
.看 https://linux.die.net/man/8/pam_limits了解更多信息。