J'ai un script Perl avec le code suivant.Pourquoi est-ce que je reçois un code de retour inattendu?
...
$kill = 1;
$exit = 0;
`kill -9 $pid >& /dev/null`;
...
print "kill=$kill exit=$exit\n";
if ($kill) {
exit $exit;
} else {
...
En résumé, ce script utilise open3() pour exécuter une commande. À un certain point, il tue le travail et l'intention est que le script se termine avec le code 0. J'ai inséré une instruction d'impression pour montrer les valeurs des variables $kill
et $exit
, qui est montrée ci-dessous.
kill=1 exit=0
Depuis $kill
est 1, j'attendre le script pour sortir avec le code 0 ci-dessus, puisque $exit
est 0. Cependant, le script sort avec le code 9, qui est le signal envoyé à l'enfant. Pourquoi le script Perl se ferme-t-il avec le code de sortie de l'enfant, au lieu de celui qui est donné à l'appel exit()
?
Orthogonale, mais ce n'est pas une bonne idée d'utiliser -9 en tant qu'argument 'kill' sauf dans le pire des cas d'urgence. Vous refusez au processus le droit d'effectuer les tâches de nettoyage qui pourraient être nécessaires. – Ether
Quelle est la valeur de $ pid? –