Resulta que por temas de Copyright, no puedo usar el artículo publicado en The Geek Stuff (ver comentarios) así que como su contenido no es original y la temática me parece de conocimiento público, vamos a reescribirlo.
1. Enviar una señal a un proceso usando el comando kill.
Estando en consola, podemos enviar una señal a un proceso mediante el comando kill. Según Wikipedia:
En Unix y los sistemas operativos tipo Unix, kill es un comando utilizado para enviar mensajes sencillos a los procesos ejecutándose en el sistema.
Así si queremos mandar una señal a un proceso con el PID 1234 haríamos lo siguiente:
$ kill -s VALUE 1234
Las señales que le podemos mandar a un proceso son las siguientes (observar Value):
$ man 7 signal [...] Signal Value Action Comment ---------------------------------------------------------------------- SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no readers SIGALRM 14 Term Timer signal from alarm(2) SIGTERM 15 Term Termination signal SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2 SIGCHLD 20,17,18 Ign Child stopped or terminated SIGCONT 19,18,25 Cont Continue if stopped SIGSTOP 17,19,23 Stop Stop process SIGTSTP 18,20,24 Stop Stop typed at tty SIGTTIN 21,21,26 Stop tty input for background process SIGTTOU 22,22,27 Stop tty output for background process [...]
2. Enviar la señal al proceso a través de otro proceso.
Para enviar señales a un proceso dentro de un programa C se emplea la siguiente llamada.
int kill(int pid, int sig);
La llamada al sistema kill toma dos argumentos:
- El PID (process ID, identificador de proceso) del proceso que tiene que ser “señalizado”.
- La señal que le enviaremos al proceso. kill devuelve 0 si todo ha ido bien, -1 si ha ocurrido algún error, se asignará el valor apropiado a errno
Vamos a verlo en un ejemplo de mis apuntes de Sistemas Operativos (3º Ingeniería Técnica de Sistemas):
//Envia al proceso con PID pasado como parámetro la señal SIGTERM
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
int main(int argc, char *argv[])
{
if (argc != 2) {
printf("Uso: %s pid\n", argv[0]);
exit(EXIT_FAILURE);
}
if (kill(atoi(argv[1]), SIGTERM) == -1) {
perror("fallo en kill");
exit(EXIT_FAILURE);
}
}
Es una pena que no se suban al carro de compartir el conocimiento, es sólo una opinión, y hay que respetarla, pero es lo bueno de Internet, la posibilidad de intercambiar la información, no se trata de presentarla como obra tuya, si no de dar a conocer lo que cualquiera quiera, por eso, es de etiqueta, citar fuentes y referencias. En fin, que como decimos por aquí, “hay gente pa tó“



Recent Comments
(12 weeks ago)
(28 weeks ago)
(28 weeks ago)
(29 weeks ago)
(29 weeks ago)
(32 weeks ago)
(32 weeks ago)
(32 weeks ago)
(32 weeks ago)
(36 weeks ago)