Llamadas al sistema para procesos
Llamada fork()
fork() esta función crea un proceso
nuevo o “proceso hijo” que es exactamente igual que el “proceso padre”. Si
fork() se ejecuta con éxito devuelve:
·
Al
padre: el PID del proceso hijo creado.
·
Al
hijo: el valor 0.
pid_t fork();
Llamadas exec()
- Son
similares en todas las versiones de Unix.
- Carga
de un fichero el código a ejecutar. Se utiliza para , después de ejecutar
un fork() cargar un nuevo código
para el proceso hijo.
Llamada getpid()
- Devuelve
el pid del proceso que lo llama. En caso de error devuelve -1.
- Esta
llamada devuelve en el estandar Posix un pid_t
pid_t getpid();
Llamada getppid()
- Devuelve
el pid del proceso padre al que lo llama. En caso de error devuelve -1.
- La
definición de esta función en estandar Posix es
pid_t getppid();
Llamada exit()
- Termina
la ejecución de un proceso. Existe también en Unix BSD y System
V.
- La
definición es del tipo:
void exit (int status);
status: estado de terminación
del proceso. Se usa para que el proceso padre conozca la forma en que finaliza
un hijo. Puede ser cualquier tipo de entero, pero se suelen usar las macros:
EXIT_FAILURE
EXIT_SUCCESS
- exit() cierra
ficheros, vacía bufferes,...
Llamada wait()
- Permite
a un proceso sincronizarse con la finalización de un proceso hijo.
pid_t wait (int *status);
Llamadas al sistema para señales
SIGNAL(señal, &funcion)
Esta llamada se
utiliza para indicar que se está preparado
para recibir algún tipo de
señal y
suministrar la dirección del
procedimiento manejador de la señal.
Después del
SIGNAL, si se recibe una señal por ejemplo SIGINT (pulsar la tecla DEL),
se efectúa:
1) El estado del proceso se guarda en su
propia pila.
2) Se ejecuta el manejador de la señal.
int señal;
int
(*función)(); función a realizar cuando se recibe una señal
SIGRETURN (&contexto)
Es llamado por
el manejador que atiende la señal cuando termina.
Recupera el
estado del proceso interrumpido desde la pila y lo continúa.
SIGACTION (sig, *act, *oact)
Es una nueva
versión de signal, examina, pone o modifica los atributos de una señal.
Sig es un entero
que indica la señal.
*act es una
estructura que contiene los atributos y manejador de la señal
*oact es la
estructura que recibe los atributos antes de la llamada
KILL
La llamada kill,
permite enviar señales entre procesos
que tienen el mismo uid
(identificador
de usuario) la forma es: kill (pid, sig)
pid -> identificador del proceso
sig -> tipo de señal
sig = 9 es la
señal SIGKILL, que mata cualquier proceso, aún
en modo tanda, esta
señal no puede
ser ignorada.
ALARM (segundos)
Esta llamada se
utiliza para interrumpir un proceso al cabo
de un cierto tiempo, su
parámetro
especifica el tiempo en segundos,
después del cual el núcleo envía la señal
SIGALRM al
proceso.
Un proceso solo
puede tener una alarma pendiente, para
resetear una alarma, basta
hacer una
llamada de alarma con parámetro cero.
PAUSE (segundos)
Esta llamada le
dice al S.O. que suspenda al proceso, hasta
que se reciba una señal.
SIGPROCMASK(how, &set, &old)
Esta señal
permite bloquear un conjunto de señales mediante una mascara de bits que
le envía al
núcleo del sistema.
SIGPENDING(SET)
Obtiene el
conjunto de señales bloqueadas.
SIGSUSPEND(sigmask)
Permite a un
proceso establecer atómicamente el mapa de bits de las señales
bloqueadas y
suspenderse a sí mismo.