c - 在 Linux 中从 C 中杀死所有进程
问题描述
我正在编写一个将作为 init 执行的 Linux C 程序。它最终需要关闭系统。我有卸载所有文件系统并实际关闭系统的代码;现在我只需要一种方法将其发送SIGTERM
到所有进程sleep(5)
,然后发送SIGKILL
到任何剩余的进程。
解决方案
如果 pid 为 -1:如果用户具有超级用户权限,则向除系统进程和发送信号的进程之外的所有进程发送信号。如果用户不是超级用户,则将信号发送给与用户具有相同uid的所有进程,不包括发送信号的进程。如果可以向任何进程发出信号,则不会返回错误。
对 pid 使用 -1 会将信号发送到调用进程有权访问的每个进程,不包括进程 1,例如
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
...
kill(-1, SIGTERM);
sleep(5);
kill(-1, SIGKILL);
谨慎使用。
推荐阅读
- netsuite - 有没有办法在 NetSuite 上的已保存搜索中搜索多个关键字?
- typo3 - 如何在我们的本地机器上设置现有的 TYPO3 项目?
- javascript - Angular Karma - TypeError:无法读取未定义的属性“_id”
- android - 如何添加 android 的多个不同的 firebase api 密钥以使用解析服务器发送推送?
- jwt - 如何在前端安全地存储 JWT
- c - 获取正确的 sscanf 格式以打印字符串和整数
- amazon-web-services - 我创建了一个 ECS 容器,如何将域绑定到它?
- javascript - AJAX查询成功时如何调用PHP函数
- ios - 在 UIScrollView 内旋转 UIImageView 使 X 和 Y 倒置。为什么?
- javascript - 如何在 android javascript 中设置修复 url?