Ho letto nei libri e nelle risorse online che la chiamata di sistema fork() crea una copia del processo corrente ed entrambi i processi iniziano l'esecuzione dal punto dopo il fork() viene effettuata la chiamata di sistema. È corretto?Il comportamento della chiamata di sistema fork() su questo codice in questo codice
Se è corretto, perché il seguente codice stampa "Test Test"? Dovrebbe stampare "Test" solo una volta (secondo il processo genitore).
#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;
}
Aggiungere un "\ n" alla stringa "test". – wildplasser
@wildplasser sorprendentemente dopo aver aggiunto \ n Ho ottenuto Test (Single time) non 2 volte. Ma perché? –
Buffering di linea di stdout. Le copie fork() del tuo programma hanno entrambi un buffer semi-pieno su stdout, che viene svuotato all'uscita del programma. (entrambe le uscite). Per dimostrarlo, potresti anche aggiungere un sleep (1) appena prima del fork() – wildplasser