Presentacion Sobre Procesos en Linux
Presentacion Sobre Procesos en Linux
Presentacion Sobre Procesos en Linux
Estados de un proceso:
La inicialización del sistema.
La ejecución por parte de un proceso (en ejecución) de una llamada al
sistema de creación de un nuevo proceso.
La petición por parte del usuario de la creación de un nuevo proceso.
El inicio de un trabajo en batch.
fork devuelve:
●
Al padre el ID de proceso hijo creado
●
Al hijo 0
●
-1 en caso de error
El nuevo proceso hijo es casi una copia excacta del proceso padre: obtiene
copias de la pila del padre, los datos, el heap y el segmento de texto
#include <unistd.h>
pid_t getpid (void);
#include <unistd.h>
pid_t getppid (void);
#include <unistd.h>
#include <sys/wait.h>
int status;
pid_t wait (&status) ;
init(1)-+-NetworkManager(4530)---{NetworkManager}(5168)
|-NetworkManagerD(4544)
|-acpid(4328)
|-atd(5328)
|-avahi-daemon(4586)---avahi-daemon(4587)
|-bonobo-activati(5662)---{bonobo-activati}(5666)
.
.
.
|-gnome-terminal(7118)-+-bash(7123)-+-pstree(7524)
| | `-watch(7162)
| |-gnome-pty-helpe(7122)
| `-{gnome-terminal}(7124)
`-inetd(4927)
● ¿Qué pasa cuando un proceso padre termina antes que un proceso hijo?.
– Al proceso huérfano se le asigna como nuevo padre el proceso (init) con
PID = 1, la función getppid() en un huérfano devuleve 1.
● ¿Qué pasa cuando un proceso hijo termina antes que un proceso padre?.
– El proceso hijo se convierte en zombie. Es borrado de memoria, excepto
su PID y su valor de retorno (status).
– Un zombie no puede ser “matado” por kill.
– Cuando el padre hace un wait(), el zombie es sacado de memoria por
completo.
execl() requiere que el programador especifique los argumentos como una lista
de strings dentro de la llamada.
El puntero NULL debe terminar la lista de argumentos, asi las llamadas pueden
localizar el final de la lista
#include <unistd.h>
int execl(const char *pathname, const char *arg, ...
/* , (char *) NULL */);
Ejemplo:
execl("/bin/ls", "ls", "-l", NULL);
●
Tanenbaum, Andrew S. Sistemas Operativos Modernos, 3era Edición.
Prentice Hall. 2009. Capítulo 2.1.
●
Kerrisk, Michael. The linux programming Interface. 2011. Capítulos 6,
24.1, 24.2, 25.1, 25.2, 26.