7
votes

Comment puis-je faire le temps d'un processus fourché qui pourrait accrocher?

J'écris un script PERL qui écrira des entrées et envoie ces entrées à un programme externe. Il y a une petite chance mais non nulle que ce programme se bloque et je tiens à le tenir compte: xxx

tel qu'il se trouve maintenant, après $ num_secs_to_timeout, programme_of_interest toujours persiste. J'ai essayé de le tuer dans le sous-programme anonyme pour $ SIG {alm} comme suit: xxx

mais cela ne fait rien. programme_of_interest persiste toujours. Comment puis-je continuer à tuer ce processus?


0 commentaires

4 Réponses :


2
votes

hmmm Votre code fonctionne pour moi , après quelques modifications mineures - que je suppose que des modifications sont apportées par vous-même pour rendre le code dans un exemple générique.

Alors cela me laisse avec deux idées:

  1. Vous avez supprimé le problème lorsque vous avez créé le code exemple - essayez de créer un petit échantillon qui fonctionne réellement (je devais changer 'programme_of_interest' et $ num_secs_to_timeout sur des valeurs réelles pour le tester). Assurez-vous que l'échantillon a le même problème.
  2. C'est quelque chose à voir avec le programme_of_interest que vous utilisez - autant que je sache, vous ne pouvez pas masquer une tuer 9, mais peut-être que quelque chose se passe quelque chose. Avez-vous essayé de tester votre code avec un script vraiment simple. J'ai créé un pour mes tests qui vont tandis que (1) {imprimé "hi \ n"; Dormir 1; }
  3. quelque chose d'autre .

    bonne chance ...


1 commentaires

On dirait que tu avais raison: j'ai réellement pipi quelque chose dans programme_of_interest: système ("Echo blahablah | programme_of_interest"). SH était en train d'être exécuté et bien tué, mais pas programme_of_interest ..



1
votes

Le seul moyen SIGKILL peut être ignoré est si le processus est bloqué dans un appel système ininterruptible. Vérifiez l'état du processus suspendu (avec PS AUX ) Si l'état est d, le processus ne peut pas être tué.

Vous pouvez également vouloir vérifier que la fonction est appelée en émettant quelque chose de celui-ci.


0 commentaires