gpt4 book ai didi

c - 如何限制子线程或子进程以限制在 C 中 fork

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:11 26 4
gpt4 key购买 nike

在C语言中,我有一个子线程(使用pthreads),有什么办法可以限制这个 child ,让我们不能在这个线程内部调用fork?

如果我们在里面写fork,程序应该不会编译。

我也可以有一个子进程而不是子线程,只要它不能进一步 fork 。

基本上,我怎样才能有一个子进程或子线程,它不能进一步派生一个进程。

最佳答案

您始终可以尝试使用 pthread_atfork 玩游戏:http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_atfork.html

基本上,您可以使用 pthread_atfork() 安装一个始终调用 exit() 的“子”回调。这样,您的线程可能仍会 fork ,但 fork 的进程将立即退出,因此不会造成任何损害(并且只会产生最小的开销)。

有了进程,它可能会稍微复杂一些。 Linux 允许您限制每个用户的进程数(当使用 setrlimit() 设置时称为 RLIMIT_NPROC)。达到此限制后,给定用户 ID 将无法再进行 fork 。因此,您可以创建一个具有 CAP_SETUID 功能的父进程和一个虚拟用户,将 RLIMIT_NPROC 设置为 1。这样,您可以从父进程派生,更改子进程uid 为您预先创建的“受限”用户的 uid,并删除 CAP_SETUID 功能。此时,child 将无法自行 fork 。

关于c - 如何限制子线程或子进程以限制在 C 中 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23355533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com