c - kill - 它会立即终止进程吗?

标签 c process freebsd kill defunct

什么是kill究竟是什么?

我有一个父进程,它正在一个接一个地创建 100 个(作为示例)子进程。在任何 child 的工作结束时,我用 kill(pid_of_child, SIGKILL) 杀死 child 我在 ps 中看不到输出。但是,如果父进程出现问题并且我从父进程退出 exit(1) (此时只有 1 个 child 在那里 - 我可以在 ps 中查看),那时我看到很多 <defunct> ppid 的进程是pid父进程。

这怎么可能?做了kill不完全杀死子进程?

最佳答案

kill 不会杀死任何东西。它向目标进程发送信号。 SIGKILL 只是一个信号。现在,SIGKILL 的标准操作——实际上,唯一的操作,因为 SIGKILL 不能被进程处理或忽略——是退出,这是真的。

”进程是一个尚未被收割的子进程,这意味着父进程尚未调用wait() 来检索退出状态的 child 。在父进程调用 wait() 之前,已失效(或“僵尸”)进程将挂起。

关于c - kill - 它会立即终止进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8468866/

相关文章:

c - Lua bool 值不能像数字一样进行比较吗?

javascript - 如何在命令中设置 process.env 变量并在 webpack 文件中检索

.net - 为 .NET 应用程序指定不同的配置文件

linux - 如何识别长时间运行的进程是否死亡?

c - freebsd9下在C中查找硬盘名

c - 空声明中无用的类存储说明符

c - 从C中的多个文件中读取内容

c++ - 在 C 中使用重载的 C++ 函数

julia - 无法在 FreeBSD 13 上使用 Julia 1.6.3 安装 PyCall.jl

c++ - 在 free() 中 : error: junk pointer, 太高而无法理解段错误:11(核心已转储)gprof