Funciones permitidas
sigemptyset
, sigaddset
, sigaction
, kill
, getpid
, malloc
, free
, pause
, sleep
, usleep
, exit
Proceso es la instancia de un programa, se pueden crear n cantidades de instancias según ejecuciones del programa.
Todos los procesos poseen 4 atributos para poder gestionarlos.
PID | (Process ID) Identificador único para cada proceso. conformado por 5 numeros enteros |
PPID | (Parent Process ID) En Unix, cada proceso es creado, por un proceso, este seria el proceso padre. |
TTY | Terminal a la que esta asociada el proceso, no todos los procesos son creados en terminal, puede haber procesos sin TTY. |
UID | (User ID) Usuario al que pertenece el proceso. |
Listar todos los procesos.
ps
Listar los procesos con el PPID
ps -f
Para finalizar un proceso tenemos dos formas, pulsando ctrl + C o localizando el PID
kill -9 <PID>
Los signals son la método por el cual podemos comunicar procesos entre si (las señales). Para conocer los signals disponibles en el sistema
kill -l
Cada señal tiene un numero entero que la representa, y un nombre.
1) SIGHUP | 2) SIGINT | 3) SIGQUIT | 4) SIGILL |
5) SIGTRAP | 6) SIGABRT | 7) SIGEMT | 8) SIGFPE |
9) SIGKILL | 10) SIGBUS | 11) SIGSEGV | 12) SIGSYS |
13) SIGPIPE | 14) SIGALRM | 15) SIGTERM | 16) SIGURG |
17) SIGSTOP | 18) SIGTSTP | 19) SIGCONT | 20) SIGCHLD |
21) SIGTTIN | 22) SIGTTOU | 23) SIGIO | 24) SIGXCPU |
25) SIGXFSZ | 26) SIGVTALRM | 27) SIGPROF | 28) SIGWINCH |
29) SIGINFO | 30) SIGUSR1 | 31) SIGUSR2 |
Numero | Nombre | Descripción |
---|---|---|
1 | SIGHUP | Cuelgue del terminal o proceso terminado |
2 | SIGINT | Emitido si el usuario interrumpe el proceso Ctrl + C |
3 | SIGQUIT | Emitido si el usuario envía señal de salida Ctrl + D |
8 | SIGFPE | Emitido si se intenta operación matemática prohibida |
9 | SIGKILL | Permite cerrar un proceso y no realiza ninguna operación de limpieza |
14 | SIGALRM | Emitido cuando el timer asociado a la función alarm expira. También cuando el timer de intervalo es configurado (setitimer) |
15 | SIGTERM | Señal de terminación de software (enviada por kill por defecto) |
17 | SIGSTOP | similar a SIGTSTP pero no puede ser ignorada o capturada. |
18 | SIGTSTP | generada cuando presionamos Control + Z. Puede ser ignorada. |
19 | SIGCONT | Emitido para reanudar un proceso que ha sido parado (suspendido) con SIGSTOP |
20 | SIGCHLD | Cuando un proceso termina o para, el proceso envía esta señal a su padre. Por defecto esta señal es ignorada. Normalmente el proceso padre invoca la función wait para obtener el estatus de término del proceso hijo. Se evita así la creación de procesos "zombies" |
29 | SIGINFO | Es una señal 1 definida por el usuario |
30 | SIGUSR1 | Es una señal 1 definida por el usuario |
31 | SIGUSR2 | Es una señal 2 definida por el usuario |
sig_t signal(int sig, sig_t func);
Genera una señal en una variedad de eventos externos, se puede configurar para que se interrumpa y continuar donde se dejo.
int sigaction(int sig, const struct sigaction *restrict act, struct sigaction *restrict oact);
Permite que el proceso de llamada examine o especifique la acción que se llevará a cabo al recibir una señal específica.
El argumento sig especifica la señal y se le puede asignar cualquiera de las señales especificadas en signal.h excepto SIGKILL y SIGSTOP.
Si el argumento act no es NULL, apunta a una estructura que especifica la nueva acción de entrega de signal Si el argumento oact no es NULL apunta a una estructura donde la acción previamente asociada con signal almacenara el retorno de sigaction.
struct sigaction {
void (*sa_handler)(int); // puntero a una función
void (*sa_sigaction)(int, siginfo_t *, void *); // puntero a una función
sigset_t sa_mask; // máscara de señal para aplicar */
int sa_flags; // Signal a continuación*/
void (*sa_restorer)(void); // opsoleto NO USAR.
}
sa_mask
máscara de señales que deberían bloquearse durante la ejecución del manejador de señal. Además, la señal que lance el manejador será bloqueada.
sa_flag
máscara de señales que deberían bloquearse durante la ejecución de sigaction (función
)
Estructuras dentro de sigaction
CUIDADO : en algunas arquitecturas se utiliza union para sa_handler
y sa_sigation
union __sigaction_u {
void (*__sa_handler)(int);
void (*__sa_sigaction)(int, siginfo_t *, void *);
};
sa_handler
Puntero de la función de captura
sa_sigaction
Puntero de la función de captura
El parámetro siginfo_t
para sa_sigaction es una estructura con los siguientes elementos
siginfo_t {
int si_signo; /* Número de señal */
int si_errno; /* Un valor errno */
int si_code; /* Código de señal */
pid_t si_pid; /* ID del proceso emisor */
uid_t si_uid; /* ID del usuario real del proceso emisor */
int si_status; /* Valor de salida o señal */
clock_t si_utime; /* Tiempo de usuario consumido */
clock_t si_stime; /* Tiempo de sistema consumido */
sigval_t si_value; /* Valor de señal */
int si_int; /* señal POSIX.1b */
void * si_ptr; /* señal POSIX.1b */
void * si_addr; /* Dirección de memoria que ha producido el fallo */
int si_band; /* Evento de conjunto */
int si_fd; /* Descriptor de fichero */
}