Fork ()

Da Gambas-it.org - Wikipedia.

La fuzione fork()

__pid_t fork (void)

crea una copia del processo. Il processo originario è chiamato "Padre", il processo clone è chiamato "Figlio".

Se la funzione fork() ha successo, essa ritorna il valore 0 (zero) al processo Figlio, e ritorna al processo Padre il valore del pid del processo Figlio (che sarà esclusivo e diverso dal pid del processo Padre). In caso di errore la funzione ritorna -1.

L'esecuzione del processo Padre è svincolata da quella del processo 'Figlio; e pertanto procedono indipendentemente l'una dall'altra.


Volendola utilizzare direttamente in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern fork() As Integer In "libc:6"

Esempio di uso in Gambas:

Library "libc:6"

' __pid_t fork (void)
' Clone the calling process, creating an exact copy.
Private Extern fork() As Integer


Public Sub Main()
 
 Dim pid, i, n As Integer
 
   pid = fork()
   
   If pid = 0 Then   ' "fork()" ritorna 0 al processo "Figlio".
' Dunque qui siamo nel processo "Figlio":
     For i = 0 To 9
       Print "Figlio: "; i
       Wait 0.3
     Next
     Quit
   Else If pid > 0   ' "fork()" ritorna al processo "Padre" il pid del processo "Figlio".
' Dunque qui siamo nel processo "Padre":
     For n = 0 To 9
       Print "Padre: "; n
       Wait 0.6
     Next
   Else
     Error.Raise("Errore nel fork !")
   Endif
  
End



Riferimenti