2011-08-05 14 views
7

Si un proceso está detenido actualmente debido a una señal SIGTRAP y se envía una señal a través de SIGSTOP kill(), lo que sería el comportamiento por defecto? ¿El SIGSTOP sería una señal pendiente que se entregue una vez que el proceso continúe nuevamente? ¿O será descartado/ignorado?POSIX comportamiento de la señal

Si el SIGSTOP está en cola, ¿hay alguna manera de sacarlo de la cola de fuera de ese proceso, como por ejemplo en un proceso de rastreo?

+0

No he podido desenterrar una respuesta autorizada. Las páginas del manual de OpenBSD insinúan lo que podría suceder, pero definitivamente no lo responden de una forma u otra. Ver http://www.openbsd.org/cgi-bin/man.cgi?query=sigaction&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html y http://www.openbsd.org/cgi-bin/man .cgi? query = sigsuspend y sektion = 2 & arch = i386 y propósito = 0 & ruta_de_manual = OpenBSD + actual – wallyk

Respuesta

3

partir de la señal (7) página del manual:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 

Una simple prueba con una aplicación se detuvo en un punto de interrupción y el envío de una muestra SIGSTOP GDB de mostrar la información cuando golpeo 'siguiente'. La señal obviamente fue entregada a la aplicación. No se puede seguir depurando hasta que le envíe un SIGCONT.

(gdb) next 
Program received signal SIGSTOP, Stopped (signal). 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
Program received signal SIGCONT, Continued. 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
(gdb) 
0

¿Qué quiere decir 'stopped due to a SIGTRAP signal'? Un SIGTRAP no detendrá un proceso; de forma predeterminada finalizará con un volcado del núcleo, o puede cambiarlo para ignorar la señal o llamar a un manejador de señal, pero en ningún caso el SIGTRAP detendrá el proceso por sí mismo. Es posible que tenga el proceso que está siendo rastreado por algún otro proceso (como un depurador) con ptrace (2), en cuyo caso se detendrá justo antes de la entrega de la SIGTRAP, pero en ese caso su bajo el control del ptrace y no continúe hasta que haya una PTRACE_CONT u otra acción de seguimiento para continuar el proceso.

+0

estoy trazando otro proceso y actúa como un depurador, por lo que cuando el proceso realiza un punto de interrupción será entregado un SIGTRAP y el proceso se detiene. Así que solo quiero saber si se detiene y se ha entregado la señal SIGTRAP, ¿qué sucederá si se sigue que se entregue un SIGSTOP al proceso? ¿Estará pendiente o solo será descartado dado que el proceso ya está detenido? – ayelder