Wie kann ein Prozess töten sich selbst?

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

anirudh@anirudh-Aspire-5920:~/Desktop/testing$ gcc test.c
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ ./a.out
Terminated

für die ersten 5 Sekunden die Ausgabe des "watch ls" angezeigt und dann abgebrochen, weil ich das senden eines SIGTERM.

Frage: Wie kann ein Prozess selbst tötet ? Ich habe getan, kill(getpid(),SIGTERM);

Meine Hypothese:
also während der kill () - Aufruf, der Prozess wechselt in den kernel mode. Die kill-Aufruf sendet SIGTERM an den Prozess und kopiert Sie in den Prozess-Prozess-Tabelle. wenn der Prozess kommt wieder in den Benutzermodus sieht es das signal in der Tabelle und beendet sich selbst (WIE ? ICH WEIß ES WIRKLICH NICHT )
(Ich glaube, ich werde falsch (möglicherweise ein Fehler) irgendwo in meiner Hypothese ... also Bitte erleuchte mich)

Dieser code ist eigentlich ein stub, die ich benutze, um zu testen, meine anderen Module des Projekts.
Seine Arbeit für mich und ich bin glücklich mit ihm aber es liegt eine Frage in meinem Kopf, wie eigentlich ein Prozess tötet sich selbst. Ich möchte wissen, die Schritt für Schritt-Hypothese.

Vielen Dank im Voraus

Anirudh Tomer

  • Warum sollte ein Prozess zu töten sich selbst? Wenn Sie beschließt zu kündigen, wird es nicht gerade nennen exit()?
  • Wie wollen Sie töten, was kein Leben???
  • Der Grund wird in dem obigen Fall, wenn u Aufruf exit() anstatt zu töten, dann wird nur die parent-Prozesses getötet wird. Der Kind-Prozess wird zum Waisenkind und init wird seine neuen Eltern-und es hält immer noch läuft.
  • Ich will, dass die gesamten Prozess-Baum ist beendet. wenn ich killpg(pid,SIGTERM) klappt es auch nicht für mich, und es tötet nur das Kind wieder "system ()" - Funktion, Prozess läuft weiter. Ich habe versucht zu tun, killpg(getpid(),SIGTERM) und es hat den job für mich. Aber wieder die Frage ist, wie ist das möglich ?
  • Vielleicht sollten Sie Bearbeiten Ihre Frage wie tötet man den gesamten Prozess-Baum, denn das scheint das zu sein, was Sie wirklich wollen.
  • ah! aber dann die Leute nicht mir Antworten, "wie ist es möglich, dass ein Prozess, der tötet sich selbst mit kill () - Funktion". Ich darf Sie Antwort auf die Frage: "wie tötet man eine komplette Prozess-Baum", indem Sie durch einige Bücher/man-Seiten oder Googlen, aber ich möchte wissen, die Hypothese, die hinter diesem Verhalten von dem code, den ich schrieb
  • Es ruft der geheime system call seppuku(2). 😉 Aber wirklich, ich glaube nicht, dass die Kontrolle wieder an den Prozess, wenn Sie nicht das hinzufügen eines SIGTERM-handler mit signal(2).

InformationsquelleAutor Durin | 2011-01-08
Schreibe einen Kommentar