如何杀死不断重生的进程而不杀死其监视器进程?

如何杀死不断重生的进程而不杀死其监视器进程?

有没有办法将进程放入 Linux 中的某种“黑名单”中?

答案1

正常的方法是更改​​监视程序的配置,以便它不会继续执行您不希望它执行的操作。我假设您由于某种原因不能这样做,但其他任何方法都是一种解决方法,并非在所有情况下都有效。

您无法将某个人列入黑名单过程:进程是一个运行时实体。该进程在启动之前并不存在。一旦开始,想要阻止它就为时已晚。无论如何,您如何识别不应该启动的进程?

您可以将某个人列入黑名单程序,或更准确地说,是程序的特定安装。所有程序都是从可执行文件启动的。因此,如果您安排可执行文件不存在,它就不会启动。您可以删除它,重命名它,甚至只是使其不可执行:

chmod a-x /path/to/program

如果由于某种原因您不想或无法修改文件系统,但具有 root 访问权限,您甚至可以使用安全框架(例如 SELinux 或 AppArmor)来禁止监视器执行此特定程序。但那更复杂。

但是,如果监视器不断尝试重新生成该程序,则如果可执行文件消失,它可能会也可能不会明智地应对。它可能会向您发送垃圾邮件(或一些带有错误消息的日志文件)。

假设监视器仅使程序保持活动状态(而不是检查程序功能,例如 Web 服务器进程的监视器可能会定期尝试访问网页并在服务器没有响应时重新启动服务器),您可以代替程序由一个除了永远阻塞之外什么也不做的程序组成。在基本实用程序集合中没有程序可以执行此操作,但您可以轻松编写一个程序:

#!/bin/sh
while sleep 999999999; do :; done

pkill -STOP programname根据您想要阻止该程序的原因,通过挂起原始程序的进程(进程 ID 为 1234或kill -STOP 1234其中 1234 为进程 ID),您可能能够也可能无法获得类似的结果。这会保留进程,但在显式恢复之前不执行任何操作(使用kill -CONT)。该进程不会消耗任何 CPU 时间,当系统需要 RAM 来做其他事情时,它的内存也会被换出,但它确实会继续消耗资源,例如打开的文件。

答案2

我建议尝试冷冻它而不是杀死它。根据监控流程的处理方式,这可能就足够了。

kill -STOP <pid>

答案3

一种可靠的方法是重命名该程序,然后再次终止它。当它可以再次运行时,将其恢复为原来的名称。

答案4

sudo vi /etc/passwd

删除程序重新生成的用户。这将停止该进程及其重生。

相关内容