Estos son los hilos individuales del proceso del receptor de paquetes. ¿Hay alguna forma de matar cualquier hilo individual? ¿Linux proporciona algún comando específico que puede matar o enviar una señal de detención a un subproceso particular en un proceso?
13
Respuestas:
En general, es bastante peligroso matar un hilo individual de un proceso más grande. Ese hilo podría:
En general, fuera de la administración y sincronización de la aplicación en sí, matar hilos individuales no es algo que tenga sentido hacer.
fuente
Puede usar tgkill (2) o
tkill
en su programa C (necesitará usar syscall (2) ) pero no desea hacerlo . Desde el interior de su programa, puede usar pthread_kill (3) , que rara vez es útil.(No sé exactamente qué efecto tendría
tgkill
otkill
, por ejemplo, conSIGKILL
oSIGTERM
- en un hilo)La biblioteca pthreads (7) usa cosas de bajo nivel (incluyendo algunas señales (7) -s y futex (7) -s, etc ...; vea también nptl (7) ) y si mató sin procesar (con
tkill
otgkill
) alguna hilo individual, su proceso estaría en un estado incorrecto (entonces comportamiento indefinido ) porque se rompería algún invariante interno.Así que estudie la documentación de su programa receptor de paquetes y encuentre otra forma. Si es software libre , estudie su código fuente y mejórelo.
Leer más atentamente señal (7) y la señal de seguridad (7) . Las señales deben enviarse a los procesos (por kill (2) ) y manejarse en subprocesos.
Y en la práctica, las señales y los hilos no se casan bien. Leer algunos tutorial de pthread .
Un truco común, al codificar un programa multiproceso (y querer manejar señales externas como
SIGTERM
) es usar una tubería (7) a su propio proceso y sondear (2) esa tubería en algún otro hilo (también puede considerar el Linux signalfd específico (2) ), con un gestor de señal escribir (2) --inging un byte o algunos de ellos en esa tubería. Ese conocido truco está bien explicado en la documentación de Qt (y puede usarlo en su propio programa, incluso sin Qt).fuente
tgkill
función no proporciona forma de terminar un hilo. Envía una señal a un hilo. Se llama "kill" porque es la forma histórica de matar un proceso y no se puede usar para matar un hilo.SIGKILL
un mensaje a un hilo lo está perjudicando. ¿O siempre está matando todo el proceso? ¿Y de quéSIGTERM
? Por cierto, incluso si solo un hilo está dañado, mi punto es que el proceso está en estado grave.SIGKILL
ySIGTERM
están definidas para matar o finalizar el proceso. Eso es cierto independientemente de qué hilo los reciba, todavía significan lo mismo. Terminar un hilo sin la estrecha cooperación de su proceso sería una basura y probablemente catastrófico para el proceso.