【发布时间】:2019-01-31 10:41:14
【问题描述】:
我正在编写一个将作为 init 执行的 Linux C 程序。它最终需要关闭系统。我有卸载所有文件系统并实际关闭系统的代码;现在我只需要一种方法将SIGTERM 发送到所有进程sleep(5),然后将SIGKILL 发送到任何剩余进程。
【问题讨论】:
-
一个将作为 init 执行的 Linux C 程序你要替换
init吗?目前还不完全清楚这就是你在做什么。如果您实际上是用自己的代码替换init,那么它需要做的事情比您迄今为止列出的要多得多。 -
@AndrewHenle 它需要做的比我列出的更多才能关闭系统?具体来说,我正在使用
gdb使已经运行的initexec()成为我正在编写的可执行文件。 -
您可能应该在 Torvalds GitHub 上查看初始化过程:linux init filetype:c。
-
如果您正在运行基于
systemd的Linux 发行版,请从这里开始:man7.org/linux/man-pages/man1/init.1.html 和这里:en.wikipedia.org/wiki/Systemdinit在这样的Linux 系统上不是一个简单的过程。跨度> -
可以列出目录
/proc获取所有进程ID,然后调用kill()向每个进程发送SIGTERM信号。