Las señales SIGKILL y SIGSTOP no pueden ser capturadas, bloqueadas o orejadas, ¿por qué?

Quiero saber por qué estas dos señales no se pueden detectar, bloquear o ignorar en un proceso. La acción de la señal restante se puede alterar usando la señal (). ¿Cuál es la diferencia entre esta señal dos y la señal restante?

Si habla sobre por qué están bloqueados, @Adam B … ya mencionó los motivos. Sin embargo, me gustaría mostrar alguna estructura interna. No es que realmente no puedas bloquear estas dos señales. Solo KERNEL tiene la capacidad de hacerlo, no nosotros.

En la implementación de signal.h , puedes ver que hay una línea como esta

#define SIG_KERNEL_ONLY_MASK (rt_sigmask(SIGKILL) | rt_sigmask(SIGSTOP))

Esto muestra que estas dos señales solo se pueden enmascarar por kernel .

Otra macro se envuelve a su alrededor.

#define sig_kernel_only(sig) (((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_ONLY_MASK))

el cual se usa luego en signal.c ..

una función llamada do_sigaction está devolviendo EINVAL cuando recibe cualquier señal que tenga un valor negativo o cualquier otra señal que no deba ser manejada más que el núcleo.

mira esto

 if (!valid_signal(sig) || sig < 1 || (act && sig_kernel_only(sig))) return -EINVAL; 

Obviamente, el sistema es más complejo de lo que podemos pensar, pero esto es solo un vistazo para demostrar que solo KERNEL tiene permiso para manejar esas señales. Nosotros no. Aparte de esto, no hay nada mágico en la implementación de la función.

@R Sahu también habló sobre un aspecto muy importante de esto. Los usuarios root también deben estar restringidos para realizar ciertas operaciones que pueden ser perjudiciales para el sistema. Además, algunas aplicaciones erróneas o que no responden pueden terminarse cuando no tiene opciones u opciones para eliminarlo. Use SIGKILL o SIGSTOP con precaución ... ya que la mayoría de las veces no se maneja bien la limpieza de la memoria y otras cosas de mantenimiento ... use estos dos solo cuando no tienes otras opciones ... SIGTERM es más popular aquí

Estos son manejados por el núcleo. Se utilizan para matar tareas que no responden (aplicaciones).

Cuando su aplicación no responde, debería haber alguna forma de salir de la aplicación. Como su tarea no puede manejar nada en este estado, debe haber una forma de enviar la señal a la tarea que no responde, pero que la tarea no responde.

SIGKILL y SIGSTOP se utilizan para este proceso.

Es por eso que la página man dice

“Las señales SIGKILL y SIGSTOP no pueden ser capturadas, bloqueadas o ignoradas”.

Estos son manejados por Kernel para usted. Hay una gran cantidad de señales / señales en tiempo real que puede utilizar para sus necesidades específicas.