ptrace: Vorgang beim Anhängen an einen Zombie-Prozess nicht zulässig

ptrace: Vorgang beim Anhängen an einen Zombie-Prozess nicht zulässig

Ich habe eine reproduzierbare Situation, in der eine Compilerinstanz in einen Zombie-Zustand wechselt, wenn ich ein Paket neu erstelle, gdbmir aber das Anhängen nicht erlaubt:

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) 

Diese Frageschlägt vor, dass das Problem bei liegt proc.sys.kernel.yama.ptrace_scope, oder dass ich vielleicht nicht root bin, aber dass sysctl auf meinem System nicht vorhanden ist, und ichBinals Root ausführen:

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 ~ # 

Als Referenz: Meine Kernelversion ist 4.9.16-gentoo.

Antwort1

Wie in der Ausgabe Ihrer Frage angegeben, handelt es sich bei einem Zombie-Prozess um einen Prozess, dessen Ausführung abgeschlossen ist. Sie können sich also nie mithilfe von gdb an ihn anhängen. Er ist jetzt lediglich ein Eintrag in der Kernel-Prozesstabelle ohne entsprechende Prozesse oder Ressourcen. Es gibt also nichts, woran sich gdb anhängen könnte.

Der einzige Grund, warum dieser als Zombie markierte Prozesstabelleneintrag existiert, besteht darin, dass sein Beendigungsstatus gelesen werden soll.

verwandte Informationen