Dos formas de mandar señales a procesos en Linux

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:

  1. El PID (process ID, identificador de proceso) del proceso que tiene que ser “señalizado”.
  2. 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ó

This entry was posted in C, Linux and tagged , , , . Bookmark the permalink.

4 Responses to Dos formas de mandar señales a procesos en Linux

  1. 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

  2. nordri says:

    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!

  3. 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

  4. nordri says:

    I have changed the post enough to not seems like yours.

Comments are closed.