web-dev-qa-db-fra.com

Voir la sortie d'un programme déjà en cours d'exécution?

Lorsque je lance le programme dans le terminal, je vois la sortie. je peux Ctrl+C pour sortir du terminal, mais existe-t-il un moyen d’en obtenir la sortie dans le terminal?

Je suis conscient que je peux diriger la sortie dans un fichier et le lire, mais il serait bien de le revoir à l'écran pour le tester.

3
ThriceGood

Frappe Ctrl+C envoie un signal SIGINT au processus en cours à l'avant-plan du terminal, en le terminant sauf si le processus ignore délibérément les signaux SIGINT;

Donc en frappant Ctrl+C vous dites au processus en cours d'exécution à l'avant-plan du terminal de se terminer.

Pour exécuter un processus l'empêchant d'occuper le terminal, vous pouvez le démarrer en arrière-plan en ajoutant & à la fin de la commande:

user@user-X550CL:~/tmp$ bash script.sh &
[1] 24961
user@user-X550CL:~/tmp$ 

Si vous avez déjà lancé un processus au premier plan, vous pouvez toujours l'arrêter en appuyant sur Ctrl+Z:

user@user-X550CL:~/tmp$ bash script.sh
^Z
[1]+  Stopped                 bash script.sh
user@user-X550CL:~/tmp$ 

Et envoyez-le en arrière-plan et reprenez son exécution en utilisant le bg intégré:

user@user-X550CL:~/tmp$ bg
[1]+ bash script.sh &
user@user-X550CL:~/tmp$ 

Vous pouvez envoyer plusieurs processus en arrière-plan:

user@user-X550CL:~/tmp$ bash script.sh &
[1] 24961
user@user-X550CL:~/tmp$ bash script.sh &
[2] 24984
user@user-X550CL:~/tmp$ bash script.sh &
[3] 24989
user@user-X550CL:~/tmp$ 

Vous pouvez lister tous les processus en arrière-plan en utilisant le jobs intégré:

user@user-X550CL:~/tmp$ jobs
[1]   Running                 bash script.sh &
[2]-  Running                 bash script.sh &
[3]+  Running                 bash script.sh &
user@user-X550CL:~/tmp$ 

Pour déplacer un processus de l'arrière-plan au premier plan, vous pouvez utiliser la fonction intégrée fg en transmettant le numéro de travail en tant qu'argument:

user@user-X550CL:~/tmp$ fg %1
bash script.sh

L'exécution de fg sans spécifier de numéro de travail en tant qu'argument aura pour effet de déplacer au premier plan le dernier processus en arrière-plan:

user@user-X550CL:~/tmp$ fg
bash script.sh
1
kos

Lancez votre application ou commande via

_command &
_

et ne pas utiliser Ctrl-C. Vous verrez la sortie jusqu'à la fermeture du terminal.

Ramenez la commande au premier plan avec

_fg
_

Exemple

Créez un script simple, par exemple.

_#!/bin/bash
while true; do
    echo foo
    sleep 5
done
_

Démarrez le script, le programme produira le mot foo. Après quelque temps, je suis entré echo bar, suivi de fg et Ctrl-C pour terminer le script.

$ ./foo & 
 [1] 29544 
 $ foo 
 foo 
 foo 
barre d'écho 
 bar
 $ foo 
 foo 
 fg 
 [1] + 29544 en cours ./foo[.____. Printer
2
A.B.