#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
int main(){
pid_t pid = fork();
if(pid==0){
system("watch ls");
}
else{
sleep(5);
killpg(getpid(),SIGTERM); //to kill the complete process tree.
}
return 0;
}
Terminal:Wie kann ein Prozess sich selbst töten?
[email protected]:~/Desktop/testing$ gcc test.c
[email protected]:~/Desktop/testing$ ./a.out
Terminated
für die ersten 5 Sekunden der Ausgabe der „Uhr ls“ gezeigt wird, und dann endet es, weil ich ein SIGTERM senden.
Frage: Wie kann ein Prozess sich selbst töten? Ich habe getötet (getpid(), SIGTERM);
Meine Hypothese: so während des Aufrufs kill() wechselt der Prozess zum Kernel-Modus. Der Kill-Aufruf sendet den SIGTERM an den Prozess und kopiert ihn in die Prozesstabelle des Prozesses. wenn der Prozess zurück in den Benutzermodus kommt, sieht er das Signal in seiner Tabelle und es beendet sich selbst (WIE? Ich weiß es wirklich nicht) (Ich glaube, ich gehe falsch (vielleicht ein Fehler) irgendwo in meiner Hypothese ... Also bitte erleuchten mich)
Dieser Code ist eigentlich ein Stub, den ich verwende, um meine anderen Module des Projekts zu testen. Es macht die Arbeit für mich und ich bin glücklich damit, aber es ist eine Frage in meinem Kopf, wie ein Prozess sich selbst tötet. Ich möchte die Schritt-für-Schritt-Hypothese kennen.
Vielen Dank im Voraus
Anirudh Tomer
Warum sollte ein Prozess sich selbst töten wollen? Wenn es sich entscheidet zu beenden, wird es nicht einfach 'exit()' aufrufen? – 341008
Wie tötet man das, was kein Leben hat ??? –
Der Grund ist im obigen Fall, wenn Sie exit() aufrufen, anstatt zu töten, dann wird nur der Elternprozess gelöscht. Der untergeordnete Prozess wird verwaist, und init wird zu seinem neuen übergeordneten Element und wird weiterhin ausgeführt. – Durin