GNU/Linux >> Tutoriels Linux >  >> Linux

Existe-t-il un moyen d'écouter le processus ?

Une approche - certes lourde - consiste à utiliser strace :

$ strace -e trace=none -e signal=none -p 12345

surveillera le processus avec le PID 12345, n'interceptant aucun appel système (premier -e ) et aucun signal (deuxième -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 termine silencieusement (lorsqu'il est exécuté avec les options indiquées ci-dessus). Vous pouvez utiliser par ex. -e signal=kill pour changer ce comportement. Notez cependant que -e signal=all (ou, de manière équivalente, en omettant le -e signal option) peut produire une grande quantité de sortie si les signaux sont reçus et gérés par le programme.


  1. Enchaîner l'exécution de "notify"

    $ process; notify $? &
    

    Notez que si le processus se termine de manière inattendue notify ne sera pas exécuté

  2. 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

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    

Vous ne savez pas quelle notification vous avez en tête. Essentiellement, il peut s'agir de tout ce qui sonne une "cloche" bien sûr. Un pour plusieurs, par exemple. notify-send à partir de libnotify bibliothèque.

$ process; notify-send "process finished with status $?" &

Bash le fait pour vous. Il vous avertira lorsque le processus se termine en vous redonnant le contrôle et il stockera le statut de sortie dans la variable spéciale $? . Il ressemble à peu près à ceci :

someprocess
echo $?

Voir le manuel bash sur les paramètres spéciaux pour plus d'informations.

Mais je suppose que vous voulez faire d'autres travaux en attendant. En bash, vous pouvez le faire comme ceci :

someprocess &
otherwork
wait %+
echo $?

someprocess & lancera le processus en arrière-plan. Cela signifie que le contrôle reviendra immédiatement et que vous pourrez faire d'autres travaux. Un processus démarré en arrière-plan est appelé un travail dans bash. wait attendra que la tâche donnée se termine, puis renverra l'état de sortie de cette tâche. Les travaux sont référencés par %n . %+ fait référence à la dernière tâche démarrée. Consultez le manuel bash sur le contrôle des tâches pour plus d'informations.

Si vous avez vraiment besoin du PID, vous pouvez aussi le faire comme ceci :

someprocess &
PID=$!
otherwork
wait $PID
echo $?

$! est une variable spéciale contenant le PID du dernier processus d'arrière-plan lancé.


Linux
  1. Existe-t-il un moyen de recadrer un fichier NETCDF ?

  2. Existe-t-il un moyen de redémarrer les badblocks ?

  3. Existe-t-il un moyen de limiter la consommation globale du processeur ?

  4. Existe-t-il un moyen de vider les informations CPUID d'un processeur?

  5. Tuer le processus en cours d'exécution sur le port 80

Existe-t-il un moyen de démarrer vim en mode lecture seule

Existe-t-il un moyen de reprendre un scp interrompu d'un fichier?

Existe-t-il un moyen de copier du texte dans htop?

Existe-t-il un moyen d'activer le retour à la ligne minicom par défaut

Quelle est la meilleure façon d'apprendre SELinux ?

Existe-t-il un moyen de sélectionner plusieurs conditions dans 'ps' ?