Jan*_*der 44
默认情况下,不,这是不允许的。在 Linux 下(来自man 2 kill
):
唯一可以发送到进程 ID 1(init 进程)的信号是那些 init 已明确安装信号处理程序的信号。这样做是为了确保系统不会意外关闭。
Pid 1 (init) 可以决定允许自己被杀死,在这种情况下,“杀死”基本上是请求它关闭自己。这是实现该halt
命令的一种可能方法,尽管我不知道有任何方法可以init
这样做。
在 Mac 上,launchd
使用信号 15 (SIGTERM)杀死(其 init 模拟)将立即重新启动系统,而无需费心关闭正在运行的程序。用 uncatchable signal 9 (SIGKILL) 杀死它没有任何作用,这表明 Mac 的kill()
语义在这方面与 Linux 的相同。
目前,我手边没有我愿意尝试的 Linux 机器,所以 Linux 随着init
用 SIGTERM 做什么的问题将不得不等待。init
像 Upstart 和 Systemd 这样的替代项目如今很流行,答案可能会有所不同。
更新:在 Linux 上,init
明确忽略 SIGTERM,因此它什么都不做。@jsbillings 有关于Upstart 和 Systemd 做什么的信息。
jsb*_*ngs 15
SysV init 会忽略 SIGKILL 或 SIGTERM 信号。据我所知,导致状态变化的唯一信号是 SIGPWR,它安排与电源相关的关闭。
Upstart 和 Systemd 似乎也没有响应 SIGKILL,从我的测试来看,SIGTERM 似乎导致 upstart 和 systemd 重新执行。
我不确定其他回答者正在运行什么,但我很确定你不能 kill -9 (SIGKILL) 或 kill -15 (SIGTERM) init (pid 1)。最有可能的是,如果您能够这样做,您会遇到内核恐慌,因为 init 意外退出并带有非零退出代码,这不太理想。它不会关闭您的计算机,或导致它重新启动。
从技术上讲是的,root 可以向 init 发出 SIGKILL。然而,init 与大多数(事实上几乎所有)其他进程的不同之处在于它允许捕获和忽略信号。
您可以松散地通过发出kill -TERM 1
类似于发出 a 的 a来终止 init,halt
或者shutdown
在该 init 将信号传递给所有子进程,基本上是所有其他进程,然后再尊重信号本身。
请注意:执行此命令将关闭您的系统。
为风味;一种可以“忽略” SIGKILL 的其他进程是处于不间断睡眠状态的进程,例如等待 i/o 的进程。可以通过发出ps axo stat,comm
状态为“D”的进程不可中断的where来找到这样的进程。
您可以重新启动该init
过程。这对于inittab
无需重新启动即可进行更改非常有用。
kill -HUP 1
Run Code Online (Sandbox Code Playgroud)
来源:http : //www.cyberciti.biz/faq/linux-unix-kill-hup-1-reread-etcinittab-file/
小智 6
sudo kill -INT 1
(interrupt) 将重新启动系统,并且
sudo kill -SEGV 1
, (分段违规) 或sudo kill -ABRT 1
(abort) 将产生内核恐慌。
注意: sudo 是必需的。
归档时间: |
|
查看次数: |
63179 次 |
最近记录: |