2010-11-10 23 views
0

Je sais que/sbin/init a une protection spéciale contre SIGKILL et SIGSTOP du noyau pour des raisons évidentes.Autoriser/sbin/init être SIGSTOPé?

J'ai essayé dire noyau Je veux recevoir SIGSTOP avec ioctl() (similaire à SIGABRT et SIGSEGV reqs en main()):

if (ioctl (0, KDSIGACCEPT, SIGSTOP) == 0) { 
    nih_signal_set_handler (SIGSTOP, stop_handler); 

mais STOP n'arrive pas à la stop_handler() (de tout ce que je sais, nih_error() n'est pas imprimé dans les logs). Dans stop_handler(), je réinitialise le sighandler STOP à SIG_DFL (sinon il reviendrait à notre gestionnaire de toute façon), mais cela le conduit probablement à être à nouveau ignoré par le noyau.

Comment dire au noyau que je veux avoir init STOPPED?

+0

Peut-être pouvez-vous expliquer ce que vous essayez d'accomplir? – MarkR

Répondre

2

Vous devez prendre l'indicateur SIGNAL_UNKILLABLE sur les indicateurs signal_struct de sa structure.

Par défaut (c'est-à-dire toujours sur les systèmes Linux non modifiés), l'indicateur SIGNAL_UNKILLABLE est défini sur les indicateurs signal_struct d'init.

Vous pouvez écrire un module noyau qui modifierait la structure de la tâche d'init pour la modifier, puis vous pourrez envoyer un signal d'arrêt à init. Envoyer un signal d'arrêt à init est une très mauvaise idée, car les zombies proliféreraient rapidement si init ne les récoltait plus.


Précision: Ceci est un noyau en struct et ne fait pas partie de la source d'init, ni accessible ou visible depuis l'espace utilisateur. Pour le changer, vous devrez écrire du code noyau ou patcher le noyau. J'imagine que ce serait assez trivial d'écrire un module du noyau qui le piraterait.

+0

Merci pour votre réponse. Puis-je modifier la structure de la tâche à partir de la source d'init et la recompiler, ou la modification nécessite-t-elle l'approche du module noyau mentionnée? Je suis conscient des implications que l'arrêt d'init pourrait provoquer normalement. Je dois activer cela pour un cas spécifique qui entraîne un redémarrage à la fin de toute façon. – Tuminoid

+0

J'ai clarifié cela ci-dessus (c'est une structure en noyau). – MarkR