我想看看当我试图终止kernel_task进程时会发生什么。由于kill -9 pid是强制退出进程的命令,并且kernel_taskpid 为 0,因此我只是运行了kill -9 0.
而不是在杀死根进程时获取Permission Denied或 a Operation not permitted,您只需获取以下信息:
Last login: Thu Jun 18 16:55:10 on ttys005
MacBook-Air:~ james$ kill -9 0
[Process completed]
Run Code Online (Sandbox Code Playgroud)
...这很奇怪,因为试图杀死launchd(低于一级kernel_task)会给你这个:
-bash: kill: (1) - Operation not permitted
Run Code Online (Sandbox Code Playgroud)
和所有其他根进程。
为什么它只是终止调用命令的进程,而不是Operation not permitted像所有其他根进程那样发送?
如果您能告诉我这个问题的答案,则可以加分:如果您创建了一个试图杀死kernel_task(并忽略SIGTERM)的脚本,则运行它会输出Killed: 9并返回到 bash。为什么它在杀死它时将其放入标准输出?为什么不做一些更具描述性的事情?
小智 4
并且
kernel_task的 pid 是 0
他们可能使用 PID 0,因为它是保留的 PID,因此您无法向进程发送信号。
我干脆就跑了
kill -9 0。
*nix 命令或多或少是系统调用kill的直接前端。从系统调用的文档来看:kill
If pid is zero:
Sig is sent to all processes whose group ID is equal to the process group ID of the sender, and
for which the process has permission; this is a variant of killpg(2).
Run Code Online (Sandbox Code Playgroud)
换句话说,在您的情况下,kill -9 0这只是一种向自身发送(致命)信号的奇特方式。(有关进程组的更多信息。)
为什么它只是终止调用该命令的进程
(kill除非您调整了 shell 设置)是内置 shell 命令。换句话说,shell 调用kill系统调用并导致它自杀。
尝试相同的操作,但使用外部kill命令,例如/bin/kill -9 0。在这种情况下,只有他们/bin/kill会被杀死。
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |