NOMBRE¶
kill - enviar una señal a un proceso
SINOPSIS¶
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
DESCRIPCIÓN¶
La llamada
kill se puede usar para enviar cualquier señal a un
proceso o grupo de procesos.
Si
pid es positivo, entonces la señal
sig es enviada a
pid. En este caso, se devuelve 0 si hay éxito, o un valor negativo
si hay error.
Si
pid es 0, entonces
sig se envía a cada proceso en el grupo
de procesos del proceso actual.
Si
pid es igual a -1, entonces se envía
sig a cada proceso,
excepto al proceso 1 (init), vea más abajo.
Si
pid es menor que -1, entonces se envía
sig a cada proceso
en el grupo de procesos
-pid.
Si
sig es 0, entonces no se envía ninguna señal pero
todavía se realiza la comprobación de errores.
VALOR DEVUELTO¶
Si hay éxito, se devuelve cero. Si hay error, se devuelve -1, y se
actualiza
errno apropiadamente.
ERRORES¶
- EINVAL
- Se especificó una señal inválida.
- ESRCH
- El pid o grupo de procesos no existe. Nótese que un
proceso existente podría ser un zombi, un proceso que ya ha sido
terminado, pero que aún no ha sido "
wait()eado".
- EPERM
- El proceso no tiene permiso para enviar la señal a
alguno de los procesos que la recibirán. Para que un proceso tenga
permiso para enviar una señal al proceso pid debe, o bien
tener privilegios de root, o bien el ID de usuario real o efectivo del
proceso que envía la señal ha de ser igual al set-user-ID real o
guardado del proceso que la recibe. En el caso de SIGCONT es suficiente
con que los procesos emisor y receptor pertenezcan a la misma
sesión.
OBSERVACIONES¶
Es imposible enviar una señal a la tarea número uno, el proceso init,
para el que no ha sido instalado un manejador de señales. Esto se hace
para asegurarse de que el sistema no se venga abajo accidentalmente.
POSIX 1003.1-2001 requiere que la llamada
kill(-1,sig) envíe
sig a todos los procesos a los que el proceso actual puede mandar
señales, excepto posiblemente a algunos procesos del sistema definidos
por la implementación. Linux permite a un proceso enviarse una señal
a sí mismo, pero en Linux la llamada
kill(-1,sig) no envía
ninguna señal al proceso actual.
HISTORIA DE LINUX¶
A lo largo de diferentes versiones del núcleo, Linux ha aplicado diferentes
reglas en torno a los permisos requeridos por un proceso no privilegiado para
enviar señales a otro proceso. En las versiones del núcleo 1.0 a la
1.2.2, se podía enviar una señal si el identificador de usuario
efectivo del remitente coincidía con el del receptor, o el identificador
de usuario real del remitente coincidía con el del receptor. Desde la
versión 1.2.3 a la 1.3.77, una señal podía ser emitida si el
identificador de usuario efectivo del remitente coincidía con el
identificador de usuario real o efectivo del receptor. Las reglas actuales,
que son conformes con POSIX 1003.1-2001, fueron adoptadas en la versión
1.3.78 del núcleo.
SVr4, SVID, POSIX.1, X/OPEN, BSD 4.3, POSIX 1003.1-2001
VÉASE TAMBIÉN¶
_exit(2),
killpg(2),
signal(2),
tkill(2),
exit(3),
signal(7)