kill() -> SIGINT?
-
hi, verstehe irgendwie trotz mehrfachem lesen der manual page
und beispiel-suche diese kill-funktion nicht so ganz.ich habe den aufruf:
kill(pid,SIGINT);
der nach einem fork() im code steht.
ich weiss, dass nur der vaterprozess diese zeile durchläuft
(der kindprozess hängt währenddessen irgendwo in einer schleife fest)
und dass der vaterprozess irgendwie damit den kindprozess killt.
aber ich verstehe nicht wieso.laut man page von kill() steht da:
kill(pid,sig);
if pid > 0 then signal sig is sent to pid.
und in meinem fall ist ja der parameter 'sig' eben "SIGINT" .das würde ja eigentlich heissen, dass der Vaterprozess SICH SELBST killt (er hat ja eine pid > 0). also es geht mir um dieses SIGINT, ich konnte nirgendwo finden, was für ein Signal das ist und was es macht.
Irgendwie muss es sich ja auch das Kind beziehen, denn immerhin wird hier der Kindprozess gekillt.also was macht SIGINT und wieso steht das nicht auf der man page
-
Siehe http://www.pronix.de/pronix-184.html zu kill()
und http://www.pronix.de/pronix-172.html für die entsprechenden
Signale.
-
Dieser Thread wurde von Moderator/in Tim aus dem Forum ANSI C in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Zum Fork-befehl habe ich folgende Seite gefunden (auch wenn es Perl statt C benutzt): http://www.cis.uni-muenchen.de/~hbosk/perl2_ws03/forking.html
Und SIGINT bedeutet "Signal Interrupt", also Unterbrechungssignal.
Dieses ist normalerweise identisch mit Strg+C, so daß die meisten Implementierungen (der C-Standard-Lib) darauf reagieren und sich selbst (den Prozess) beenden.
-
hallo,
danke für die antworten! aber da steht ja genau das selbe wie in der manual page:
Damit senden Sie das Signal sig_nr an einen Prozess, welcher mit pid spezifiziert wird
ich check das nicht!
Der Vaterprozess (!) liest ja die zeilekill(pid,SIGINT);
das heisst doch, dass dann dieses 'pid' in der Funktion GRÖSSER null ist, denn so ist das ja nunmal beim vaterprozess! also wird das signal (siehe oben) an den VATERprozess gegeben.
so verstehe ich das...es ist doch so:
pid_t pid; fork();
jetzt hat doch das child einen pid-wert von 0 und der Vaterprozess einen
pid-Wert von >0, oder nicht?also... wieso beendet er dann mit dem kill-aufruf das Kind und nicht sich selbst? pid is ja grösser null, und genau dahin soll das signal gesendet werden.
weird... oO
-
Also, ich verstehe nicht ganz dein Problem. Hats du verstanden, wie man: signal(2) funktioniert oder nicht?
Eine Liste der Signale findest du in der 7. Sektion der Manapage (man 7 siganl).
PS: bei OpenBSD scheint es keine signal(2) und signal(7) zu geben sondern beide zusammen in man: signal(3)
-
hdi schrieb:
ich check das nicht!
Der Vaterprozess (!) liest ja die zeilekill(pid,SIGINT);
...
pid_t pid; fork();
kannst du mal deinen Code anzeigen? 'pid' muss jene PID haben, an die du das signal schicken willst.
pid_t child; child = fork(); if(child < 0) { perror("fork"); exit(1); } if(child > 0) { /* Parent proc. */ do_some_stuff(); kill(child, SIGINT); /* sende SIGINT Signal an child proc. */ waitpid(child, NULL, 0); ... } /* child proc. */ do_something_else(); ...
-
hm.
also sollte es nicht heissen:
Damit senden Sie das Signal sig_nr an einen Prozess, welcher mit pid spezifiziert wird
sondern:
Damit senden Sie das Signal sig_nr an einen KINDProzess, welcher mit pid spezifiziert wird
..also bezieht sich 'kill' IMMER auf einen child-prozess oder?
ein vaterprozess kann sich also mit dem aufruf kill gar nicht selbst beenden?es ist eben find ich missverständlich, wie das überall erklärt ist.
denn der prozess mit der pid 'pid' ist ja sowohl der kind- als auch der vaterprozess, kommt halt drauf an wie es überprüft wird (ob 0 oder grösser)
-
Es heitßt "Damit senden Sie das Signal sig_nr an einen Prozess, welcher mit pid spezifiziert wird", denn du kannst Signale an andere nicht verwandte Prozesse senden.
es ist eben find ich missverständlich, wie das überall erklärt ist.
und wo wird das deiner Meinung nach missverständlich erklärt?