Difference between revisions of "Fork vs exec"

From Sistemi Operativi
Jump to navigation Jump to search
m
m
 
Line 1: Line 1:
--- FORK ---
+
=== FORK ===
 
<pre>
 
<pre>
 
+------------------------------------+-----------+----------------------------------------------+
 
+------------------------------------+-----------+----------------------------------------------+
Line 40: Line 40:
 
</pre>
 
</pre>
  
--- EXECVE ---
+
=== EXECVE ===
 
<pre>
 
<pre>
 
+-------------------------------------------+--------------+-------------------------------------------------------------+
 
+-------------------------------------------+--------------+-------------------------------------------------------------+

Latest revision as of 18:04, 11 November 2025

FORK

+------------------------------------+-----------+----------------------------------------------+
| Categoria                          | Ereditato | Dettagli                                     |
+------------------------------------+-----------+----------------------------------------------+
| Spazio di memoria (code, dati)     |    Sì     | Copiato (copy-on-write)                      |
| Registri CPU                       |    Sì     | Copiati, tranne valore di ritorno di fork()  |
| File descriptor aperti             |    Sì     | Stessi oggetti kernel, stesso offset         |
| File offset                        |    Sì     | Condiviso tra padre e figlio                 |
| File status flags (O_APPEND, ecc.) |    Sì     | Condivisi                                    |
| UID, GID, EUID, EGID               |    Sì     | Copiati                                      |
| Directory corrente / root          |    Sì     | Copiate                                      |
| Maschera umask                     |    Sì     | Copiata                                      |
| Segnali bloccati / maschera segn.  |    Sì     | Copiata (ma segnali pendenti esclusi)        |
| Handler dei segnali                |    Sì     | Copiati                                      |
| Memory mapping (mmap)              |    Sì     | MAP_PRIVATE copiati, MAP_SHARED condivisi    |
| Pipe, socket, FIFO                 |    Sì     | Stesso endpoint kernel                       |
| flock() locks                      | Parziale  | Condivisi finché entrambi tengono il file    |
| Variabili d’ambiente               |    Sì     | Copiate                                      |
| argv / envp                        |    Sì     | Copiati                                      |
| Process group / sessione           |    Sì     | Copiati                                      |
| File locks fcntl()                 | Parziale  | Associati al processo, validi finché no exec |
+------------------------------------+-----------+----------------------------------------------+

Cosa non viene ereditato

+------------------------------------+-----------+----------------------------------------------+
| Categoria                          | Ereditato | Dettagli                                     |
+------------------------------------+-----------+----------------------------------------------+
| PID                                |    No     | Nuovo PID per il figlio                      |
| Parent PID (getppid)               |    No     | È il PID del padre                           |
| Segnali pendenti                   |    No     | Non copiati                                  |
| Timer, alarm                       |    No     | Azzerati                                     |
| Thread (pthread)                   |    No     | Solo il thread chiamante sopravvive          |
| Mutex / semafori non-shared        |    No     | Stato indefinito se erano bloccati           |
| File locks fcntl() dopo exec()     |    No     | Decadono dopo exec()                         |
| Code di messaggi / IPC System V    |    No     | Non duplicate                                |
+------------------------------------+-----------+----------------------------------------------+

EXECVE

+-------------------------------------------+--------------+-------------------------------------------------------------+
| Categoria                                 | Mantenuto?   | Dettagli                                                    |
+-------------------------------------------+--------------+-------------------------------------------------------------+
| PID                                       |   Sì         | Il processo resta lo stesso, cambia solo il programma.      |
| PPID (Parent PID)                         |   Sì         | Rimane invariato.                                           |
| UID, GID, EUID, EGID                      |   Sì         | Mantenuti, salvo eseguibili setuid/setgid.                  |
| File descriptor aperti                    |   Sì/No      | Mantenuti se flag FD_CLOEXEC **non** impostato.             |
| File offset                               |   Sì         | Conservato per i file descriptor mantenuti.                 |
| File locks (fcntl/flock)                  |   Parziale   | Mantengono validità per i fd ancora aperti.                 |
| Signal dispositions: ignorati             |   Sì         | I segnali impostati su SIG_IGN restano tali.                |
| Signal dispositions: handler custom       |   No         | Resettati a default (SIG_DFL).                              |
| Signal mask / pending signals             |   No         | Maschera resettata, pending signals persi.                  |
| Process group e sessione                  |   Sì         | Invariati.                                                  |
| Directory corrente                        |   Sì         | Non cambia.                                                 |
| Root directory (chroot)                   |   Sì         | Non cambia.                                                 |
| Umask                                     |   Sì         | Invariato.                                                  |
| Variabili d’ambiente                      |   Da execve  | Rimpiazzate dal nuovo `envp` passato alla execve.           |
| Argomenti (`argv`)                        |   Da execve  | Impostati dai nuovi parametri.                              |
| Memory mappings (vecchio programma)       |   No         | Tutto lo spazio di memoria del vecchio programma è distrutto|
| Thread                                    |   No         | Tutti i thread terminano, resta solo il nuovo programma.    |
| Pending I/O                               |   No         | Eventuali buffer non flushati nel vecchio proc. si perdono. |
+-------------------------------------------+-------------+--------------------------------------------------------------+