Je veux savoir s'il existe un moyen d'écouter un processus sous Linux et unix - quand il se termine et quel est le code de sortie du processus (script).
Je ne veux pas écrire un script qui s'exécutera en X
quelques secondes et vérifiera ps -ef | grep PID
si le processus est toujours en cours. Je veux savoir s'il existe un moyen que le processus m'informe quand il s'est terminé et quel était son code de sortie.
wait
marche? Combien de CPU cela prendra-t-il généralement du système?wait
fonctionne bash . Je sais que cela ne prend pas une quantité notable de ressources système. Vous pouvez consulter le code source ici: git.savannah.gnu.org/cgit/bash.git/tree/builtins/wait.defUne approche - certes brutale - consiste à utiliser
strace
:surveillera le processus avec le PID 12345, n'interceptant aucun appel système (premier
-e
) et aucun signal (second-e
). Une fois le processus terminé de manière régulière, la valeur de sortie sera imprimée.Si le processus se termine par un signal, strace se ferme silencieusement (lorsqu'il est exécuté avec les options données ci-dessus). Vous pouvez utiliser par exemple
-e signal=kill
pour modifier ce comportement. Notez, cependant, que-e signal=all
(ou, de manière équivalente, en omettant l'-e signal
option) peut produire une grande quantité de sortie si des signaux sont reçus et traités par le programme.la source
Enchaînement de l'exécution de "notifier"
Notez que si le processus se termine de manière inattendue
notify
ne sera pas exécutéMise en place de pièges
Le processus est signalé par des signaux d'une signification différente et peut réagir de manière appropriée
Vous ne savez pas quelle notification vous avez en tête. Essentiellement, cela peut être tout ce qui sonne bien sûr. Un pour beaucoup, par exemple.
notify-send
de lalibnotify
bibliothèque.la source
si votre processus s'exécute en tant que démon, envisagez d'utiliser upstart ou monit, ce sont des méthodes standard:
http://www.alexreisner.com/code/upstart
http://mmonit.com/monit/
Ils peuvent surveiller le processus, quitter le code, redémarrer les processus, écrire le journal, ...
la source
Avec,
ptrace()
vous pouvez attacher un traceur à un processus (ou en exécuter un nouveau), définir un hook avecPTRACE_O_TRACEEXIT
(linux> = 2.5.60) et dormir jusqu'à la sortie du processus, puis avecPTRACE_GETEVENTMSG
obtenir l'état de sortie.Voici un exemple d'implémentation appelé stopper , je l'ai vérifié avec l'
attach
option uniquement et il a fallu quelques modifications pour le faire fonctionner (si nécessaire, je posterai le code quelque part).la source