wie zu töten Kind der Gabel?
Ich habe den folgenden code ein, durch die ein Kind Gabel. Und ich will töten das Kind, bevor Sie es zu beenden Sie seine Ausführung in der übergeordneten. wie es zu tun?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int i;
main (int ac, char **av)
{
int pid;
i = 1;
if ((pid = fork()) == 0) {
/* child */
while (1) {
printf ("I m child\n");
sleep (1);
}
}
else {
/* Error */
perror ("fork");
exit (1);
}
sleep (10)
//TODO here: how to add code to kill child??
}
fork()
gibt einepid_t
, nicht einint
, so sollten Sie deklarieren die variable als solche.- In keinem Zusammenhang zu der ursprünglichen Frage: Wenn die Gabel gibt ein neuer Prozess erzeugt wird (bei Erfolg) " und " beide Eltern und Kind-Ausführung fortsetzen, von dem Punkt, wo
fork
aufgerufen wurde. pid = 0 für ein Kind-Prozess (gut, es kann immer bekommen Sie über getpid()) und der pid > 0 für einen übergeordneten Prozess. Der Fehler ist nur bei der Gabel gibt -1 zurück. In Ihrem code, den Sie behandeln eine "parent-Prozess" Teil, wie ein Fehler. - mögliche Duplikate von Wie man ein Kind töten Prozess, durch den Eltern-Prozess?
- Froh, dass der Frage-Titel nicht verlangen Begriffsklärung. Hinweis: zu jedem Kindermord irren, dass diese "Gabel" und nicht "Gabel".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Senden Sie ein signal.
Die zweite form zu bevorzugen, unter anderem, wenn Sie verarbeiten Signale von sich.
SIGTERM
, wenn Sie höflicher sein wollen 🙂SIGTERM
hier? So weit ich das sehen kann, hat er nicht einen handler.Sehen töten system nennen. In der Regel eine gute Idee, SIGTERM-ersten zu geben, der Prozess, die Möglichkeit zu sterben, dankbar vor der Verwendung von SIGKILL.
BEARBEITEN
Vergessen, die Sie verwenden müssen waitpid zu bekommen, wird der Rückgabestatus des Prozesses und verhindern, dass zombie-Prozesse.
WEITER BEARBEITEN
Können Sie den folgenden code verwenden:
Wird es geben, der Prozess 5 Sekunden zu sterben würdevoll
Problem
kill(pid, SIGKILL)
aus der Eltern.