Traitement du signal SIGKILL
Si un linux processus est en attente d'e/S (j'.e c'est dans SLEEP
l'état) et une SIGKILL
signal est émis à l'encontre de cela, lors de la résiliation (STOPPED
de l'état), il sera de passer à travers RUNNING
ou READY
état?
En d'autres termes, pour un processus pour gérer une interruption de système tel que celui généré par SIGKILL
est-il nécessaire de passer par RUNNING
ou READY
état ?
Sachant que dans des circonstances normales, un processus peut gérer une interruption de noyau et sachant que SIGKILL
a une assez contradictoires but de tuer un qui ne répond pas de signal, j'avais des doutes au sujet de combien le contrôle du processus d'être tué, si du tout.
SIGKILL
est un exemple malheureux car c'est un signal qui ne peut être géré par le processus de réception. Si votre question est sans rapport avec SIGKILL
et c'est un simple exemple, envisager d'utiliser un autre signal d'exprimer ce que tu veux dire.
OriginalL'auteur Radu Stoenescu | 2013-04-02
Vous devez vous connecter pour publier un commentaire.
Signal sont "remis" à un processus par le noyau, de sorte que l'envoi d'un signal à partir de processA à processB emploie le noyau. Lorsque SIGKILL est livré le noyau ne pas permettre à toute activité par le processus (mode utilisateur), plus précisément les processus de rappel: atexit appels, _exit. Rien. Le processus est tout simplement détruite par le système. Cela implique une certaine activité en mode noyau. Tampon de données est perdue. System v sémaphores et d'autre du noyau de mémoire persistante objets sont restés en mémoire. Il peut être un vrai bordel.
Si quelque chose dans la mémoire du noyau est à l'origine d'un blocage vous utilisez le sysrq interface sous linux:
http://tldp.org/HOWTO/Remote-Serial-Console-HOWTO/security-sysrq.html
--à effectuer ce qu'un semblant d'ordre de l'arrêt, vous pouvez obtenir.
C'est pourquoi à l'aide de SIGKILL est un absolu en dernier recours, parce que vous ne pouvez pas savoir ce que vous êtes en rupture. Et il ne résoudra pas tous se bloque.
Exactement ce que vous travailler?
SIGKILL
. Je le comprends plutôt comme "un processus a besoin d'être actif pour traiter un signal".Un processus doit avoir le contexte de processeur pour recevoir les signaux. SIGKILL est légèrement différente. Les processus ont deux composantes - kernel-parfois appelé P0, l'utilisateur d'un code foncier, de l'appeler la P1. P0 et P1 sont simplement retourné à paginée du pool non paginée du pool et de la mémoire système lorsque SIGKILL est capté par le noyau. Certaines choses comme les sémaphores rester dans la mémoire du noyau. Ainsi, dans ce sens P1 jamais ne devient actif. Vous avez certainement pourrait faire valoir que certains P0 activité est dans le contexte de processus, mais votre code de mode utilisateur ne peut rien faire à ce sujet.
Oui, je le sais et votre post déjà dit que
SIGKILL
ne peut pas être gérées. Mais je ne pense pas que l'OP demandeSIGKILL
mais tous les signaux en général. Donc, votre première phrase de votre commentaire est la réponse à la discussion de la question de l'OMI.Un noyau de processus ( un zombie par exemple) ne peut pas recevoir de signal, car il n'interroge pas pour eux. Donc, il n'y a rien à SIGKILL, de toute façon. C'est peut-être la source de la confusion. Le noyau "partie" n'choses, l'utilisateur de la partie terrestre ne font pas "trucs"
La réponse à cette question est, le processus doit être en mesure de sondage pour les signaux, ce qui signifie qu'il doit avoir le contexte de processus. Il doit être en mesure d'accéder à la cpu. Vrai pour tous les signaux.
OriginalL'auteur jim mcnamara
En plus de jim mcnamara réponse:
SIGKILL (kill -9) ne peuvent pas être traitées.
Voir la réponse à https://stackoverflow.com/a/2541618/1456519 pour plus d'.
OriginalL'auteur Victor Burenkov