首页 > 解决方案 > 在 Linux 中从 C 中杀死所有进程

问题描述

我正在编写一个将作为 init 执行的 Linux C 程序。它最终需要关闭系统。我有卸载所有文件系统并实际关闭系统的代码;现在我只需要一种方法将其发送SIGTERM到所有进程sleep(5),然后发送SIGKILL到任何剩余的进程。

标签: clinuxprocesssignals

解决方案


如果 pid 为 -1:如果用户具有超级用户权限,则向除系统进程和发送信号的进程之外的所有进程发送信号。如果用户不是超级用户,则将信号发送给与用户具有相同uid的所有进程,不包括发送信号的进程。如果可以向任何进程发出信号,则不会返回错误。

对 pid 使用 -1 会将信号发送到调用进程有权访问的每个进程,不包括进程 1,例如

#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
...
kill(-1, SIGTERM);
sleep(5);
kill(-1, SIGKILL);

谨慎使用。


推荐阅读