execlp() 系统调用

execlp() 系统调用

我想通过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了解更多信息。

相关内容