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: 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 mais cela ne fait rien. programme_of_interest persiste toujours. Comment puis-je continuer à tuer ce processus? P> p> $ SIG {alm} code> comme suit: p>
4 Réponses :
hmmm Votre code fonctionne pour moi strong>, 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. P>
Alors cela me laisse avec deux idées: p>
bonne chance ... p>
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 ..
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 Vous pouvez également vouloir vérifier que la fonction est appelée en émettant quelque chose de celui-ci. P> PS AUX CODE>) Si l'état est d, le processus ne peut pas être tué. P>
J'ai pu tuer avec succès mon processus EXED () ED par Tuer le groupe de processus B>, comme indiqué sur la réponse à la question À Perl, tuer l'enfant et ses enfants lorsque l'enfant a été créé à l'aide d'OUVERT A >. J'ai modifié mon code comme suit: après le délai d'attente, programme_of_interest est tué avec succès. P> P>
Je pense que "tuer 9, - $ PID" devrait être "tuer -9, $ pid". J'ai utilisé le système ("Kill -9 $ pid") à la place.
Je pense que "tuer -9 $ pid" devrait encore être "tuer -9 $ pid", mais oui, le PID négatif indique de tuer un groupe de processus au lieu d'un processus. De la documentation de Kill: "Contrairement à la coquille, si le signal est négatif, il tue des groupes de processus au lieu de processus. (Sur le système V, un numéro de processus négatif tuera également des groupes de processus, mais ce n'est pas portable.)"
Le code ci-dessus (par StrictlyRude27) n'a pas fonctionné hors de la boîte, car - $ PID est orthographié dans les capitales. (BTW: Il y a aussi: http://www.gnu.org /software/coretutils/manual/html_node/timeout-invocation.html )
Voici un exemple avec test: p>