Difference between revisions of "Fork vs exec"
Jump to navigation
Jump to search
m |
m |
||
| Line 1: | Line 1: | ||
| − | + | === FORK === | |
<pre> | <pre> | ||
+------------------------------------+-----------+----------------------------------------------+ | +------------------------------------+-----------+----------------------------------------------+ | ||
| Line 40: | Line 40: | ||
</pre> | </pre> | ||
| − | + | === 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. | +-------------------------------------------+-------------+--------------------------------------------------------------+