web-dev-qa-db-fra.com

Comment obtenir le statut de sortie d'un processus à partir d'une autre session Shell?

Supposons que j'exécute une commande dans une session Shell, par exemple bash -c 'apt-get update && apt-get upgrade'. 5 minutes plus tard, je décide d'aller prendre un en-cas à l'extérieur et réalise que j'ai oublié de ajouter un mécanisme de notification pour savoir si la sortie a été un succès ou un échec.

Eh bien, qu'est-ce que je fais maintenant? Si seulement je pouvais demander à un autre terminal le statut de sortie de cette autre commande (ou plus précisément de ce PID), je pourrais peut-être tout de même afficher une sorte de fenêtre contextuelle. La question est donc la suivante: comment interroger le statut de sortie d'un processus en cours depuis un autre terminal?

En d'autres termes,

DONNÉ que j'ai un processus en cours d'exécution sur le terminal A ET que son PID est connu

QUAND j'exécute une commande dans le terminal B

ALORS, je devrais pouvoir savoir si le processus du terminal A se termine avec un état de sortie 0 ou un état de sortie> 1.

8

Utilisez strace comme suit:

Sudo strace -e trace=none -e signal=none -q -p $PID

Ici, ni les appels système ni les signaux n’ont d’intérêt, nous disons donc à strace de les ignorer avec les expressions -e et de supprimer un message d’état avec -q. strace se rattache au processus avec le PID $PID, attend sa sortie normale et affiche son statut de sortie de la manière suivante:

+++ exited with 0 +++

Une expression if simple pour appeler tout type de notification pourrait être:

if Sudo strace -e trace=none -e signal=none -q -p $PID |& grep -q ' 0 '; then
  echo yeah
else
  echo nope
fi

Exemple d'exécution

# in terminal 1
$ (echo $BASHPID;sleep 10;true)
8807
# in terminal 2
$ if Sudo strace -e{trace,signal}=none -qp8807|&grep -q ' 0 ';then echo yeah;else echo nope;fi
yeah

# in terminal 1
$ (echo $BASHPID;sleep 10;false)
12285
# in terminal 2
$ if Sudo strace -e{trace,signal}=none -qp12285|&grep -q ' 0 ';then echo yeah;else echo nope;fi
nope

La majeure partie du crédit revient à cette réponse sur U & L , laissez un vote positif si cela vous semble utile.

8
dessert