Exec (crida al sistema)
En informàtica, exec és una funcionalitat d'un sistema operatiu que executa un fitxer executable en el context d'un procés ja existent, substituint l'executable anterior. Aquest acte també es coneix com a superposició. És especialment important en sistemes semblants a Unix, encara que també existeix en altres llocs. Com que no es crea cap procés nou, l'identificador de procés (PID) no canvia, però el codi de màquina, les dades, el munt i la pila del procés se substitueixen pels del nou programa.La crida exec està disponible per a molts llenguatges de programació, inclosos els llenguatges compilables i alguns llenguatges de script. En els intèrprets d'ordres del sistema operatiu, elexec amb l'ordre incorporada substitueix el procés de l'intèrpret d'ordres amb el programa especificat.[1]
Nomenclatura
Les interfícies per a executiu i les seves implementacions varien. Depenent del llenguatge de programació, pot ser accessible mitjançant una o més funcions, i depenent del sistema operatiu es pot representar amb una o més crides de sistema reals. Per aquesta raó, exec es descriu de vegades com una col·lecció de funcions.
Els noms estàndard d'aquestes funcions en C sónexecl ,execle ,execlp ,execv ,execve, iexecvp (vegeu més avall), però no "exec" en si. El nucli de Linux té una crida de sistema corresponent anomenada "execve", mentre que totes les funcions esmentades anteriorment són embolcalls d'espai d'usuari al seu voltant.
Els idiomes de nivell superior solen proporcionar una crida anomenadaexec.[2][3][4][5]
Unix, POSIX i altres sistemes multitasca
[modifica]Prototips de llenguatge C
[modifica]L'estàndard POSIX declara funcions executives al fitxer unistd.hFitxer de capçalera , en llenguatge C. Les mateixes funcions es declaren a process.h per a DOS (vegeu més avall), OS/2 i Microsoft Windows.
int execl(char const *path, char const *arg0, ...);
int execle(char const *path, char const *arg0, ..., char const *envp[]);
int execlp(char const *file, char const *arg0, ...);
int execv(char const *path, char const *argv[]);
int execve(char const *path, char const *argv[], char const *envp[]);
int execvp(char const *file, char const *argv[]);
int fexecve(int fd, char *const argv[], char *const envp[]);
Referències
[modifica]- ↑ «exec(3) - Linux manual page» (en anglès). man7.org. [Consulta: 14 octubre 2016].
- ↑ «Wait System Call in C» (en anglès americà). GeeksforGeeks, 03-06-2017. [Consulta: 15 maig 2023].
- ↑ «Process Lifecycle» (en anglès). [Consulta: 12 desembre 2023].
- ↑ «Process State» (en anglès). [Consulta: 12 desembre 2023].
- ↑ «Process State Diagram in Operating System» (en anglès). [Consulta: 12 desembre 2023].