1 votes

Unbuffer avale le code de sortie du processus tué

La commande "unbuffer" semble avaler le statut de sortie de son enfant si le processus est tué. Y a-t-il quelque chose à faire pour arrêter ce comportement? Il n'avale pas le statut de sortie si le processus enfant quitte généralement avec un statut de sortie non nul.

Pour constater ce comportement, considérez 2 scripts bash :

a.sh:

    exit 1

vs

b.sh:
    kill -11 $$

puis exécutez un unbuffer sur chacun d'eux et affichez $?. Dans le premier cas, je vois 1 mais dans le deuxième cas je vois 0 alors que je m'attends à voir 139

3voto

user210584 Points 376

Oui, vous devez modifier le script "unbuffer" pour changer la manière dont "unbuffer" attend que le processus enfant se termine.

À partir de la documentation d'expect:

Des éléments supplémentaires peuvent apparaître à la fin de la valeur de retour de wait. Un cinquième élément facultatif identifie une classe d'informations. Actuellement, la seule valeur possible pour cet élément est CHILDKILLED, auquel cas les deux valeurs suivantes sont le nom du signal de style C et une brève description textuelle.

Dans le script "unbuffer", cherchez exit [lindex [wait] 3] et remplacez-le par le code suivant:

set result [wait]
send_user "wait a retourné : $result\n"
if { [llength $result] == 4 } {
    exit [lindex $result 3]
} else {
    exit 1
}

Après cette modification, vous verrez clairement la différence. Par exemple, en exécutant votre script b.sh, vous obtiendrez quelque chose comme ceci:

wait a retourné : 8606 exp6 0 0 CHILDKILLED SIGSEGV {violation de la segmentation}

Vous pouvez bien sûr changer la valeur de exit 1 par la valeur de votre choix. Vous pouvez sortir avec 139 si vous le souhaitez, mais la valeur ne changera pas pour correspondre au signal à moins d'ajouter encore plus de code au script "unbuffer".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X