Des cas de Test en C pour WIFSIGNALED, WIFSTOPPED, WIFCONTINUED
Je suis en train de jouer avec waitpid() et le signal() et je suis à la recherche de fiable des cas de test pour le retour WIFSIGNALED(statut) = WIFSTOPPED(statut) = WIFCONTINUED (statut) = vrai, mais ne trouvez pas tout...
Soin de me dire comment puis-je faire en sorte que ces return true si je peut corriger mon code?
Aussi, quelques indications sur ce qui signaux devraient je l'attrape avec signal() pour tester ces macros serait utile...
Vous devez vous connecter pour publier un commentaire.
Manipulation WIFSIGNALED est facile. Le processus de l'enfant peut se suicider avec le
kill()
appel système. Vous pouvez aussi vérifier core dumps - certains signaux créer (SIGQUIT, IIRC); certains signaux ne sont pas (SIGINT).Manipulation WIFSTOPPED peut être plus difficile. La simple étape à faire est d'essayer pour l'enfant d'envoyer lui-même SIGSTOP avec le
kill()
appel système à nouveau. En fait, je pense que cela devrait fonctionner. Notez que vous voudrez peut-être vérifier sur SIGTTIN et SIGTTOU et SIGTSTOP - je crois qu'ils comptent pour WIFSTOPPED. (Il ya aussi une chance que SIGSTOP ne fonctionne sainement lorsqu'il est envoyé par un débogueur à un processus, il est en cours d'exécution via la non-POSIX appel système,ptrace()
.)Manipulation WIFCONTINUED est quelque chose que je pense que les parents ont à faire; après avoir détecter un processus a été arrêté, votre code d'appel devrait le faire poursuivre par l'envoi d'un son état de signal (
kill()
de nouveau). L'enfant ne peut pas livrer de lui-même; il a été arrêté. Encore une fois, je ne suis pas sûr qu'il y a des rides à s'inquiéter, probablement.Un cadre quelque chose comme ci-dessous va vous permettre de vérifier les résultats de la
wait()
etwaitpid()
appels.Vous n'avez pas fait de capture les signaux (à l'aide de
signal()
ou fonction) qui sont envoyés.signal()
installe un gestionnaire qui remplace le comportement par défaut pour le signal spécifique - donc, si vous voulez vérifier le signal de la fin de votre processus, en choisir un qui a ce comportement par défaut - "man -s7 signal
" vous donnera plus de détails un signal comportement par défaut.Pour les macros que vous avez mentionné l'utilisation
SIGSTOP
pourWIFSTOPPED(status)
,SIGCONT
pourWIFCONTINUED (status)
etSIGINT
pourWIFSIGNALED(status)
Si vous voulez plus de flexibilité pour tester, vous pouvez utiliser le tuer (voir "
man kill
") pour envoyer des signaux à votre processus.kill -l
liste de tous les signaux qui peuvent être envoyés.SIGSTOP
de l'enfant;WIFSTOPPED
est conçu pour l'utilisation dans le parent:if( pid != 0 && WIFSTOPPED( status ) { /* do something */ }
dans vos tests, vous pouvez fork() et d'envoyer des signaux à votre enfant des processus? Dans ce scénario, le processus fils sont des cas de test?
MODIFIER
ma réponse est sur le codage d'un C test. vous fourche, obtenir le pid de votre enfant (le processus
avec les gestionnaires de signaux installé), vous pouvez envoyer le signal à l'aide d'
kill(2)
.De cette façon, vous pouvez tester le statut de sortie