Warum endet das Programm nicht? Das Kind hängt nach dem Drucken, was es zu drucken hat. Wenn der Elternprozess statt des Kindes schlief, hätte es funktioniert, aber warum ist das so? Ich habe auch versucht, am Ende jedes Prozesses den Ausgang aufzurufen, aber mit dem gleichen Ergebnis. Muss ich immer auf das Ende des Kindes warten?Warum hängt diese Gabel?
int main(){
int pid = fork();
char s[100] = "Hello";
if(pid > 0){
printf("FIRST PRINT IN PARENT: %s\n", s);
strcat(s, " - PARENT");
printf("SECOND PRINT IN PARENT: %s\n", s);
}
else if(pid == 0){
printf("IMMEDIATELY IN CHILD: %s\n", s);
sleep(2);
printf("AFTER 2 SCONDS IN CHILD: %s\n", s);
}
return 0;
}
Sind Sie sicher, dass * * it "hängt"? Es ist nicht so, dass das Terminal die Ausgabe des Kinds druckt und die Eingabeaufforderung einfach nicht erneut anzeigt? Drücken Sie die Eingabetaste und sehen Sie, was passiert. Wenn Sie in Ihrem Terminal genau hinsehen, werden Sie wahrscheinlich * die Eingabeaufforderung * vor der letzten Ausgabe des Kinds * sehen. –
Nicht Sie, aber Ihre _shell_ wartet auf den _parent_ Prozess zu beenden. Sie müssten doppelt Gabel-um die Shell-Eingabeaufforderung sofort wiederherstellen – Ctx
Der Code funktioniert für mich. Wenn Sie vermuten, dass es "hängt", ist es immer noch in der "ps" -Ausgabe sichtbar? – cdarke