Ma i processi di figlio e genitore risiedono su diversi spazi di memoria. Questi spazi di memoria hanno lo stesso contenuto e qualunque operazione venga eseguita da un processo non influirà sull'altro processo.
Quando vengono creati i processi figlio; Ora entrambi i processi avranno lo stesso contatore del programma (PC), quindi entrambi questi processi indicheranno la stessa istruzione successiva. I file aperti dal processo genitore saranno gli stessi per il processo figlio.
Il processo figlio è esattamente lo stesso del suo genitore, ma c'è differenza negli ID dei processi:
Proprietà del processo figlio
Di seguito sono riportate alcune delle proprietà che contiene un processo figlio:
Proprietà che non sono ereditate dal processo per bambini
Di seguito sono riportate alcune delle proprietà che non sono ereditate da un processo di bambino:
fork () in c
Non ci sono argomenti in fork () e il tipo di ritorno di fork () è intero. È necessario includere i seguenti file di intestazione quando viene utilizzato FORK ():
#includereQuando si lavora con fork (), può essere utilizzato per il tipo pid_t Per i processi ID come PID_T è definito in .
Il file di intestazione è dove è definito FORK (), quindi è necessario includerlo al programma per utilizzare FORK ().
Il tipo di ritorno è definito in e la chiamata fork () è definita in . Pertanto, è necessario includere entrambi nel programma per utilizzare la chiamata di sistema fork ().
Sintassi di fork ()
La sintassi del sistema FORK () Chiama in Linux, Ubuntu è la seguente:
fork pid_t (void);Nella sintassi il tipo di ritorno è pid_t. Quando il processo figlio viene creato con successo, il PID del processo figlio viene restituito nel processo genitore e 0 verrà restituito al processo figlio stesso.
In caso di errore, viene restituito al processo genitore e il processo figlio non viene creato.
Non vengono passati argomenti a fork ().Esempio 1: chiamando fork ()
Considera il seguente esempio in cui abbiamo usato la chiamata di sistema FORK () per creare un nuovo processo di figlio:
#includerePRODUZIONE:
sysads@linuxhint $ gcc fork.C -o forkIn questo programma, abbiamo usato FORK (), questo creerà un nuovo processo per bambini. Quando viene creato il processo figlio, sia il processo genitore che il processo figlio indicheranno l'istruzione successiva (lo stesso contatore del programma). In questo modo le restanti istruzioni o le dichiarazioni C verranno eseguite il numero totale di tempi di processo, ovvero 2N volte, dove n è il numero di chiamate di sistema fork ().
Quindi quando la chiamata fork () viene utilizzata una volta come sopra (21 = 2) Avremo il nostro output 2 volte.
Qui quando viene utilizzata la chiamata di sistema fork (), la struttura interna sarà simile:
Considera il seguente caso in cui il fork () viene utilizzato 4 volte:
#includereProduzione:
sysads@linuxhint $ gcc fork.C -o forkOra il numero totale di processi creati è 24 = 16 e abbiamo eseguito la nostra dichiarazione di stampa 16 volte.
Esempio 2: test se fork () ha avuto successo
Nell'esempio seguente abbiamo usato il costrutto decisionale per testare il valore (int) restituito da fork (). E vengono visualizzati i messaggi corrispondenti:
#includerePRODUZIONE:
sysads@linuxhint $ gcc fork.C -o forkNell'esempio sopra abbiamo usato il tipo PID_T che memorizzerà il valore di restituzione di fork (). FORK () è chiamato in linea:
p = fork ();Quindi il valore intero restituito da fork () viene memorizzato in p e quindi p viene confrontato per verificare se la nostra chiamata fork () ha avuto successo.
Quando viene utilizzata la chiamata fork () e il figlio viene creato correttamente, l'ID del processo figlio verrà restituito al processo genitore e 0 verrà restituito al processo figlio.L'ID del processo figlio nel processo dei genitori non sarà uguale all'ID del processo figlio nel processo figlio stesso. Nel processo figlio l'ID del processo figlio sarà 0.
Con questo tutorial puoi vedere come iniziare con la chiamata del sistema fork in Linux.