Ich habe in Büchern und Online-Ressourcen gelesen, dass der Systemaufruf fork() eine Kopie des aktuellen Prozesses erstellt und beide Prozesse ab dem Punkt nach der Verzweigung ausgeführt werden() Systemaufruf wird gemacht. Ist es richtig?Das Verhalten des fork() - Systemaufrufs unter Linux in diesem Code
Wenn es richtig ist, warum druckt der Code "Test Test"? Es sollte "Test" nur einmal (durch den Elternprozess) drucken.
#include <sys/types.h> /* pid_t */
#include <sys/wait.h> /* waitpid */
#include <stdio.h> /* printf, perror */
#include <stdlib.h> /* exit */
#include <unistd.h> /* _exit, fork */
int main(void)
{
int ctr =1;
int pc = 1;
printf("%s", "Test ");
pid_t pidmain = fork();
return EXIT_SUCCESS;
}
Fügen Sie der Zeichenfolge "test" ein "\ n" hinzu. – wildplasser
@WildPlasser überraschend nach dem Hinzufügen \ n Ich habe Test (Single Time) nicht 2 mal. Aber warum? –
Zeilenpufferung von stdout. Die fork() d-Kopien Ihres Programms haben beide einen halbgefüllten Puffer auf stdout, der beim Programm-Exit geleert wird. (beide Ausgänge). Um dies zu demonstrieren, können Sie auch einen Schlaf (1) kurz vor dem fork() hinzufügen – wildplasser