GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen SIGKILL SIGTERM unter Berücksichtigung des Prozessbaums

Sie können das nicht per Signal steuern; nur sein übergeordneter Prozess kann dies steuern, indem er waitpid() aufruft oder Setzen von Signalhandlern für SIGCHLD . Siehe SIGCHLD und SA_NOCLDWAIT im sigaction(2) Manpage für Details.

Außerdem hängt es von der Linux-Kernel-Version ab, was mit untergeordneten Threads passiert. Bei den POSIX-Threads von 2.6 sollte das Beenden des Haupt-Threads dazu führen, dass die anderen Threads sauber beendet werden. Bei 2.4 LinuxThreads ist jeder Thread tatsächlich ein separater Prozess und SIGKILL gibt dem Root-Thread keine Chance, den anderen zu sagen, dass sie herunterfahren sollen, während SIGTERM tut.


Wenn Sie den Root-Prozess (Elternprozess) beenden, sollten verwaiste Kinder entstehen, keine Zombie-Kinder. verwaiste Kinder werden erstellt, wenn Sie den Elternprozess eines Prozesses beenden, und der Kernel macht init zum Elternteil von Waisenkindern. init soll warten, bis orphan stirbt, und dann wait verwenden, um es zu bereinigen.

Zombie-Kinder werden erstellt, wenn ein Prozess (nicht sein Elternteil) endet und sein Elternteil seinen Beendigungsstatus aus der Prozesstabelle nicht übernimmt.

Es klingt für mich so, als ob Sie sich Sorgen machen, Waisen zu hinterlassen, denn per Definition stirbt das Zombie-Kind selbst, wenn Sie einen Zombie-Elternprozess töten.

Um Ihre Waisenkinder zu töten, verwenden Sie kill -9 , was das Äquivalent von SIGKILL ist.

Hier ist ein ausführlicheres Tutorial zum Töten von Sachen unter Linux:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/


Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Unterschied zwischen $HOME und '~' (Tilde)?

  3. So beenden Sie den Zombie-Prozess

  4. Unterschied zwischen Cgroups und Namespaces

  5. Was ist der Unterschied zwischen nicht präemptivem, präemptivem und selektivem präemptivem Kernel?

Unterschied zwischen apt und apt-get erklärt

Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

Der Unterschied zwischen Kill, Pkill und Killall?

Unterschied zwischen Snat und Maskerade?

SIGTERM vs. SIGKILL:Was ist der Unterschied?

Was ist der Unterschied zwischen kill, pkill und killall?