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ó“
Y yo diciendo que últimamente parecía haberse puesto de moda explicar el uso de las señales en Linux (me llamó mucho la atención cuando vi publicado el artículo que has traducido @Nordri ;))
La verdad es que se trata de un buen artículo que más de uno agradecerá que haya sido traducido al castellano.
Salu2 compañero
Gracias! me gustó sobre todo la parte del teclado, sólo conocía el Ctrl-C y Ctrl-Z y abría una consola nueva para mandar señales. 😀
Saludos!
You cannot copy/paste/translate our article on your website. You’ve violated the copyright: http://www.thegeekstuff.com/copyright
We spend lot of time creating article on our website, which you cannot just copy/paste. I hope you understand.
Please delete this article and all others that you’ve copy/pasted from our website.
~Ramesh
http://www.thegeekstuff.com
I have changed the post enough to not seems like yours.