Answers:
否。killall
首先列出所有要杀死的进程,然后遍历该列表并杀死它们。如果运行的是一个前炸弹,则在killall
杀死其中一个进程之后,另一个进程很可能会立即回收刚刚释放的PID,但killall
认为它已经杀死了该进程,因此实际上什么也不会发生。
如果前炸弹对您来说是个问题,则应使用ulimit。将进程数限制为例如128个,并且前炸弹将静默地死掉或停止扩展,这取决于它的编写方式。无论如何,它不会对该系统的其他用户造成任何危险。
killall
如果将所有pid分配给forkbomb,您将如何启动?如果可以的话,请先这样做killall -STOP -u user
,以防止炸弹扩散,然后再使用杀死炸弹killall -9 -u user
。
killall
您不要停止外壳程序(可能停止自我操作)。
killall process never kills itself (but may kill other killall processes).
最近,我不得不在可公开访问的CTF服务器上处理许多分支。我已经在pam_limits中设置了ulimit。对于大多数前炸弹,您可以执行以下操作:
killall -v -STOP -u mallory; killall -v -9 -u mallory
STOP信号冻结了进程,因此killall有机会列出所有进程并杀死它们。
但是对于典型的python forkbombs,只要达到ulimits,分支过程就会异常退出。这意味着,如果您在nproc上的ulimit为500,则您将拥有大约500个python进程的稳定状态,但是每个进程最多只能运行几毫秒。当我尝试上述方法时,当killall向任何给定的python进程发送信号时,它已经退出了。
我学到的最重要的东西来自killall(1)
:
-g, --process-group
Kill the process group to which the process belongs. The kill
signal is only sent once per group, even if multiple processes
belonging to the same process group were found.
因此,这可能会满足您的要求:
killall -9 -v -g -u mallory
或者,您可以改killall -STOP
而检查当前的静态过程并在闲暇时将其杀死。CONT
如果需要,您可以使用信号恢复它们。
ulimit
当然已经用于来宾帐户。当它运行时ulimit
(如何使用同一帐户)如何停止一个前哨炸弹?