Estoy desarrollando una aplicación y me gustaría que imprima algunas estadísticas de tiempo de ejecución en la consola a pedido. kill
y las señales vinieron a mi mente de inmediato.
Leer las señales de Unix en Wiki SIGINFO
parece 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:
- ¿Por qué
SIGINFO
falta en mi sistema? ¿Está ausente en todos los sistemas GNU Linux? - ¿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?
- ¿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?
^T
Aparece en la salida destty -a
?dd
con eso en mi Mac.^T
durante ladd
ejecución no hace nada en la máquina Linux; actualizaré la pregunta en consecuencia.Respuestas:
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 info
entrada para control-T que hace que el kernel se entregueSIGINFO
altty
grupo 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).
fuente
Con respecto a su pregunta 1):
Desde
man 7 signal
un sistema Arch Linux:Según esta definición,
SIGINFO
solo está disponible en arquitecturas alfa o sparc.fuente