Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 拆除叉形炸弹:杀死叉形过程_Linux_Bash_Docker - Fatal编程技术网

Linux 拆除叉形炸弹:杀死叉形过程

Linux 拆除叉形炸弹:杀死叉形过程,linux,bash,docker,Linux,Bash,Docker,我想使用docker在shell中执行用户提供的(可能不安全的)代码。每次跑步都应该受到时间的限制,比如说10秒。所以10秒后,我想停止命令和它发出的所有分叉 我已经使用ulimit-u30设置了适当的最大进程数限制,现在forkbomb不会对系统造成任何损坏 我按id=1000的用户运行docker,容器内的用户id=3000,所以启动命令的用户不会被fork炸弹阻止 现在我想处理超时问题。不幸的是,超时10秒docker运行-u 3000。。。forkbomb不起作用。我要做的是杀死id=3

我想使用docker在shell中执行用户提供的(可能不安全的)代码。每次跑步都应该受到时间的限制,比如说10秒。所以10秒后,我想停止命令和它发出的所有分叉

我已经使用
ulimit-u30
设置了适当的最大进程数限制,现在forkbomb不会对系统造成任何损坏

我按id=1000的用户运行docker,容器内的用户id=3000,所以启动命令的用户不会被fork炸弹阻止

现在我想处理超时问题。不幸的是,
超时10秒docker运行-u 3000。。。forkbomb
不起作用。我要做的是杀死id=3000的用户拥有的所有进程,但是这些进程会无限分叉,我担心
killall-kill-u3000
不会一直工作
killall
不是原子的,是吗

因此,我正在寻找一种方法来杀死某些特定用户拥有的所有进程,即使这些进程分叉。我发现了一个包含以下代码的:

cd /proc;
for p in [0-9]*; do read CMDLINE < $p/cmdline; if [[ $CMDLINE == "processWithBombName" ]]; 
then kill -s SIGSTOP $p; fi; done
for p in [0-9]*; do read CMDLINE < $p/cmdline; if [[ $CMDLINE == "processWithBombName" ]]; 
then kill -s SIGKILL $p; fi; done
cd/proc;
对于[0-9]*中的p;请勿阅读CMDLINE<$p/CMDLINE;如果[[$CMDLINE==“processWithBombName”];
然后kill-s SIGSTOP$p;fi;完成
对于[0-9]*中的p;请勿阅读CMDLINE<$p/CMDLINE;如果[[$CMDLINE==“processWithBombName”];
然后kill-s SIGKILL$p;fi;完成
首先,上面的代码是否没有并发问题?例如,当我们停止时,循环读取id为{1,2,3}的进程,当它停止pid=1时,id为2的进程已经死亡,pid=4已经创建。pid=4会被杀死吗


其次,我如何为用户终止所有进程并确保没有创建新进程?

我可能遗漏了一些东西,但为什么不在其自己的docker容器中运行每个forkbomb,然后使用cron终止所有10秒以上的docker容器呢?终止容器将终止其中的所有进程。@UsmanIsmail谢谢!它起作用了。是否有任何关于终止后新进程的保证(docker确实终止了新进程,但新进程将出现并永远保留)?只要所有新进程都是主docker进程的子进程,它们都应该终止。这是由内核确保的,请参见此处的文档: