[Ayuda] pregunta
Arturo Espinosa Aldama
arturo en ximian.com
Mie Mayo 29 17:51:21 CDT 2002
On Wed, 29 May 2002, Carlos Castaños wrote:
> "ROLANDO HERMIDA." escribió:
>
> > SALUDOS: EN KILL-9 ¿QUE SIGNIFICA EL
> > 9?
> > GRACIAS.
No, me encanta la respuesta.
Kill es un programa que manda señales a los procesos. Las señales activan
handlers dentro del programa, que hacen que reaccione de cierta manera.
Por ejemplo, si a un servidor le envias la señal SIGHUP (Hang UP), lo más
común es que el servidor cargue de nuevo su configuración y haga reset.
Las señales son un invento de BSD, según recuerdo, y se usan sobre todo
para comunicarse con procesos que no tienen una terminal asociada (como
los demonios).
Cada señal tiene un número. Para ver todas las señales que hay, da el
comando kill -l. Ahora, hay ciertas señales que un programa no puede
cachar:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS
Cuando das kill proceso, se selecciona por default SIGINT (INTerrupt, la
2), la cual es cachable. Por convención, SIGINT termina el proceso, pero
bajo el control de éste: o sea, es una manera de pedirle que termine.
Cuando se recibe una señal cachable, pero no hay handler asignado, el
programa termina.
Cuando das kill -9 proceso, estás llamando a SIGTERM (TERMinate, la 9).
SIGTERM no se puede cachar, y provoca que el kernel mate el proceso. Pero,
como el proceso no puede controlar su terminación, puede que sus archivos
de recursos, locks, memoria compartida o lo que sea que use, queden
bloqueados. Siempre es bueno dar kill con SIGINT, antes de usar SIGTERM.
Cosas interesantes:
- si mandas a un proceso la señal 11 (SIGSEGV), harás que se caiga con
segmentation fault y genere un core, si la opción estaba activada. Esto
te permite examinar el estado de una aplicación en el momento que le enviaste
la señal. Esta señal no es cachable.
- SIGBUS se genera cuando se manipula memoria con la alineación incorrecta
y otro tipo de casos relacionados. No cachable.
- SIGFPE sucede cuando haces matemáticas inválidas de punto flotante. Creo
que es cachable.
- SIGPIPE se genera cuando un proceso al que enviabas datos por un pipe
anónimo ha muerto. Lo puedes cachar para que tu programa pueda manejar
el error emergente.
- SIGINT es lo mismo que ^C
- SIGSTOP es lo mismo que ^Z
- SIGCONT es usado por fg y bg
- SIGALRM se usa mucho para pedir al kernel que envie esa señal cada
cierto tiempo.
Mas info en tu libro básico de UNIX más cercano.
Saludos,
Arturo
> NAME
> kill - terminate a process
>
> SYNOPSIS
> kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
> kill -l [ signal ]
>
> DESCRIPTION
> The command kill sends the specified signal to the speci
> fied process or process group. If no signal is specified,
> the TERM signal is sent. The TERM signal will kill pro
> cesses which do not catch this signal. For other pro
> cesses, it may be necessary to use the KILL (9) signal,
> since this signal cannot be caught.
>
> Most modern shells have a builtin kill function, with a
> usage rather similar to that of the command described
> here. The `-a' and `-p' options, and the possibility to
> specify pids by command name is a local extension.
>
> OPTIONS
> pid... Specify the list of processes that kill should sig
> nal. Each pid can be one of five things:
>
> n where n is larger than 0. The process with
> pid n will be signaled.
>
> 0 All processes in the current process group
> are signaled.
>
> -1 All processes with pid larger than 1 will be
> signaled.
>
> -n where n is larger than 1. All processes in
> process group n are signaled. When an argu
> ment of the form `-n' is given, and it is
> meant to denote a process group, either the
> signal must be specified first, or the argu
> ment must be preceded by a `--' option, oth
> erwise it will be taken as the signal to
> send.
>
> commandname
> All processes invoked using that name will
> be signaled.
>
> -s signal
> Specify the signal to send. The signal may be
> given as a signal name or number.
>
> -l Print a list of signal names. These are found in
> /usr/include/linux/signal.h
>
> -a Do not restrict the commandname-to-pid conversion
> to processes with the same uid as the present pro
> cess.
>
> -p Specify that kill should only print the process id
> (pid) of the named processes, and not send any sig
> nals.
>
> SEE ALSO
> bash(1), tcsh(1), kill(2), sigvec(2), signal(7)
>
> AUTHOR
> Taken from BSD 4.4. The ability to translate process
> names to process ids was added by Salvatore Valente <sva
> lente en mit.edu>.
>
> Linux Utilities 14 October 1994 KILL(1)
>
>
> Saludos
>
_______________________________________________
Ayuda mailing list
Ayuda en linux.org.mx
Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/
Más información sobre la lista de distribución Ayuda