2010-11-30 5 views
4

je ne pourrais pas faire mon programme sleep() après avoir utilisé kill (pid, SIGTERM) que puis-je faire?tuer après le sommeil

Le code que je utilise:

kill(PID_of_Process_to_be_killed,SIGTERM); 
sleep(5); --> this is not working 
sleep(5); --> this is working 

la solution est maintenant:

kill(PID_of_Process_to_be_killed,SIGTERM); 
sleep(sleep(5)); 

mais pourquoi le premier sommeil après kill retour 0?

Répondre

6

Votre appel sleep() peut se terminer prématurément en raison de la réception d'un signal. Vérifiez la valeur de retour. Si c'est positif, vous pouvez vouloir sleep() encore sur cette valeur. De http://www.manpagez.com/man/3/Sleep/:

Si la fonction retourne sleep() parce que le temps requis est écoulé, la valeur retournée sera zéro. Si la fonction sleep() retourne en raison de la fourniture d'un signal, la valeur retournée sera le montant unslept (le temps requis moins le temps effectivement dormi) en quelques secondes

+1

Dans ce cas, le signal est vraisemblablement SIGCHLD (bien que cela interromprait le premier sommeil dans le code de la question, je pense). Cela pourrait être n'importe quoi, cependant. –

3

Bien, sauf si vous gérez le signal, SIGTERM est mort.

Si son autre processus ou thread envoyant le signal de veille renvoie EINTR.

Si vous utilisez la bibliothèque standard au lieu d'un appel système direct (vous l'êtes probablement) sleep renvoie -1 et errno = EINTR.

+0

pour une raison quelconque après l'envoi d'une tuer avec SIGTERM en utilisant le gestionnaire d'origine, je ne peux pas utiliser une fonction de sommeil. Je parviens à l'utiliser avant mais pas après le tuer ... savez-vous pourquoi cela arrive? Kill (PID_of_Process_to_be_killed, SIGTERM) ; sommeil (5); -> ceci ne fonctionne pas sommeil (5); -> ceci fonctionne –

+0

que contient ERRNO? Que retourne le sommeil? – Joshua

+0

le premier retour de sommeil 5 - ce qui signifie qu'il n'a rien fait. et le deuxième sommeil (5) renvoie 0 - ce qui signifie qu'il dort 5 secondes. Pour l'instant j'utilise ce sommeil (sommeil (5)) - mais je ne pense pas que c'est la bonne solution ... –