2010-09-27 5 views
0

comment tuer un processus enfant lors de l'envoi d'une interruption avec un raccourci clavier, puis envoyer un signal au parent indiquant que le processus enfant a été supprimé?accusé de réception de signal

Répondre

2

Le processus parent reçoit généralement un signal chaque fois qu'un enfant meurt malgré tout. C'est le signal SIGCHLD.

Ce signal peut être bloqué par le processus parent, mais dans le cas contraire, il est toujours délivré lorsqu'un enfant quitte pour une raison quelconque. Le parent peut dire pourquoi l'enfant est sorti en utilisant l'une des wait famille (aka wait, wait3, wait4, ou waitpid) pour récolter le code retour.

0

Il peut être difficile de faire en sorte que le processus enfant ait le focus, afin qu'il reçoive des événements clavier.

Vous pouvez toujours utiliser la commande kill pour envoyer un signal à un processus donné. Ne laissez pas le nom tuer vous tromper, vous pouvez envoyer un signal avec kill, kill -SIGNUM pid, mais SIGTERM est la valeur par défaut, ce qui provoque généralement un processus de quitter.

Donc, si vous voulez envoyer un signal SEGV pour traiter 11 que vous feriez

kill -SEGV 11 

Vous pouvez configurer le parent pour attraper un signal, le renvoyer à l'enfant via un appel à tuer (2), puis attendez que l'enfant sorte en utilisant waitpid.

gestionnaire de signal du parent aimerait quelque chose comme ceci:

int status; 
kill(child_pid, SIG_TO_SEND);/*send to child*/ 
waitpid(child_pid, &status);/* wait for child to give up */ 

Si vous étiez sérieux au sujet de garder le parent et je savais que le signal était seulement pour l'enfant que vous auriez probablement définir une variable dans le parent, sortez du gestionnaire de signal, puis faites le travail d'envoyer et d'attendre l'enfant. En général, il est bon de sortir des gestionnaires de signaux le plus rapidement possible.

Questions connexes