ptrace:附加到僵尸进程时不允许操作

ptrace:附加到僵尸进程时不允许操作

我遇到了一种可重现的情况,当我重建包时,编译器实例进入僵尸状态,但gdb不允许我附加:

serenity ~ # ps ax | grep defunct
11351 pts/1    Z+     0:00 [x86_64-pc-linux] <defunct>
21838 pts/5    S+     0:00 grep --colour=auto defunct
serenity ~ # gdb -p 11351
GNU gdb (Gentoo 7.10.1 vanilla) 7.10.1
[snip]
Attaching to process 11351
warning: process 11351 is a zombie - the process has already terminated
ptrace: Operation not permitted.
(gdb) 

这个问题表明问题出在proc.sys.kernel.yama.ptrace_scope,或者我可能不是 root,但 sysctl 不存在于我的系统上,并且我以 root 身份运行:

serenity ~ # sysctl -a | grep ptrace
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.enp4s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
serenity ~ # whoami
root
serenity ~ # 

作为参考,我的内核版本是4.9.16-gentoo.

答案1

正如您的问题输出中所述,僵尸进程是已完成执行的进程,因此您永远无法使用 gdb 附加到它 - 现在它只是内核进程表中的一个条目,没有任何相应的进程或资源,所以 gdb 没有任何东西可以附加。

此进程表条目存在(标记为僵尸)的唯一原因是为了读取其退出状态。

相关内容