Falta SIGINFO en GNU Linux (Arch Linux)

12

Estoy desarrollando una aplicación y me gustaría que imprima algunas estadísticas de tiempo de ejecución en la consola a pedido. killy las señales vinieron a mi mente de inmediato.

Leer las señales de Unix en Wiki SIGINFOparece ser el camino a seguir porque:

  • Está destinado a estos fines
  • No finaliza el proceso si el manejador de señal no está implementado (contrario a SIGUSRx- ver aquí )

Sin embargo, al inspeccionar la salida de kill -l, parece que mi servidor no tiene esta señal implementada.

Mis preguntas son:

  1. ¿Por qué SIGINFOfalta en mi sistema? ¿Está ausente en todos los sistemas GNU Linux?
  2. ¿Hay una manera fácil (es decir, sin recompilación de kernel / glibc) para habilitar esta señal? Si ninguno, ¿cuál sería el camino difícil?
  3. ¿Qué señal alternativa podría usar para mis propósitos que no causara ningún efecto secundario si el proceso objetivo no lo maneja? (Ya supongo que ninguno ya que no pude encontrar ninguna otra señal adecuada en el manual de glibc )

Metainformación de Linux:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

Actualización: Todavía estoy buscando más información sobre por qué esta señal se excluye condicionalmente de otros sistemas que no sean BSD (ver comentarios a continuación). La señal parece ser bastante útil para muchos propósitos, por lo que me cuesta creer que sea solo una cuestión de capricho, entonces, ¿cuál es el verdadero obstáculo para que esta señal esté disponible en Linux?

Robert Rossmann
fuente
2
¿ ^TAparece en la salida de stty -a?
Mark Plotnick
Ah, no. Debo haber confundido el comportamiento descrito ddcon eso en mi Mac. ^Tdurante la ddejecución no hace nada en la máquina Linux; actualizaré la pregunta en consecuencia.
Robert Rossmann
Sí, Ctrl-T y SIGINFO son funciones BSD (y MacOSX).
Mark Plotnick
Pero la señal se define en la Biblioteca GNU C que utilizan los sistemas Linux ... ¿Se desactiva a propósito?
Robert Rossmann
1
@RobertRossmann, las señales son entregadas por el núcleo. La pregunta es por qué el kernel de Linux no lo implementa (porque probablemente copiaron señales SysV).
Ángel

Respuestas:

4

Se habló (en los días linux 0.x-1.x) de agregar esto (porque era útil en los sistemas BSD), pero si recuerdo correctamente, había razones por las que era más difícil hacerlo bien en Linux que BSD en ese momento .

Tenga en cuenta que lo que está preguntando es solo una pequeña parte de la función (es decir, está hablando de una stty infoentrada para control-T que hace que el kernel se entregue SIGINFOal ttygrupo de procesos) - esa parte es "fácil" - pero que el kernel informe información sobre el estado del proceso cuando no maneja la señal (porque en ese momento muy pocas cosas tenían soporte para eso, la característica era principalmente sobre "este proceso gira o se cuelga" y "qué proceso es de todos modos ") es más difícil: ISTR incluso tiene problemas de seguridad / confianza al mostrar esa información con precisión y si debe asociarse con la ruta de la clave de atención segura. Dicho esto, puede haber algún valor en la versión "fácil" que solo envía la señal ...

(Desde la memoria personal; una búsqueda rápida en la web no muestra nada obvio, pero creo que uno tendría que buscar en archivos realmente antiguos para encontrar la discusión).

Eichin
fuente
1

Con respecto a su pregunta 1):

Desde man 7 signalun sistema Arch Linux:

SIGINFO 29, -, - Un sinónimo de SIGPWR

...

(La señal 29 es SIGINFO / SIGPWR en un alfa pero SIGLOST en un sparc).

...

SIGPWR (que no se especifica en POSIX.1-2001) generalmente se ignora por defecto en los otros sistemas UNIX donde aparece.

Según esta definición, SIGINFOsolo está disponible en arquitecturas alfa o sparc.

Guido
fuente