130 votes

Comment puis-je mettre le processus Linux en cours d'exécution actuel en arrière-plan?

J'ai une commande qui télécharge des fichiers en utilisant git vers un serveur distant depuis la coquille Linux et cela prendra de nombreuses heures pour terminer.

Comment puis-je mettre ce programme en cours d'exécution en arrière-plan? Ainsi je peux toujours travailler sur la coquille et que le processus soit également terminé?

0 votes

Juste une supposition, mais avez-vous essayé ctrl+z ou exécuté votre commande de cette manière : #command &

0 votes

La commande est déjà en cours d'exécution donc je n'ai pas d'autre option. Je ne suis pas sûr quelle commande essayer. Je ne voulais pas interrompre le processus en cours donc je ne l'ai pas expérimenté.

0 votes

Nous devrions attendre une réponse plus professionnelle alors :) Je voulais dire si vous aviez la chance de tout recommencer. (La commande & chose)

239voto

Ed Heal Points 24309

Suspendez le processus avec CTRL+Z puis utilisez la commande bg pour le reprendre en arrière-plan. Par exemple:

sleep 60
^Z  #Caractère de suspension affiché après avoir appuyé sur CTRL+Z
[1]+  Stopped  sleep 60  #Message montrant les informations sur le processus arrêté
bg  #Reprendre le travail en cours (dernier travail arrêté)

En savoir plus sur le contrôle des tâches et l'utilisation de bg dans la page de manuel de bash:

CONTROLE DES TACHES
Taper le caractère de suspension (généralement ^Z, Control-Z) pendant qu'un processus s'exécute provoque l'arrêt de ce processus et renvoie le contrôle à bash. [...] L'utilisateur peut alors manipuler l'état de ce travail, en utilisant la commande bg pour le continuer en arrière-plan, [...]. Un ^Z prend effet immédiatement, et a pour effet secondaire supplémentaire de supprimer les sorties en attente et le clavier.

bg [infos_job ...]
Reprendre chaque travail suspendu infos_job en arrière-plan, comme s'il avait été démarré avec &. Si infos_job n'est pas spécifié, la notion de travail en cours du shell est utilisée.

MODIFIER

Pour démarrer un processus qui continue à s'exécuter même si vous fermez le terminal

nohup [commande] [-arguments] > [nom_fichier] 2>&1 &

par exemple

nohup /home/edheal/monprog -arg1 -arg2 > /home/edheal/sortie.txt 2>&1 &

Pour simplement ignorer la sortie (pas très judicieux), changez le nom du fichier en /dev/null

Pour envoyer le message d'erreur dans un fichier différent, changez le &1 pour un nom de fichier.

De plus : Vous pouvez utiliser la commande jobs pour voir une liste indexée de ces processus en arrière-plan. Et vous pouvez tuer un processus en arrière-plan en exécutant kill %1 ou kill %2 avec le numéro étant l'index du processus.

0 votes

J'ai essayé mais comme il affiche quelque chose, il revient au premier plan avec% montrant combien de données sont téléchargées.

0 votes

Le processus écrira toute sortie sur le terminal comme vous l'avez instruit à faire au début. Vous devrez le redémarrer pour obtenir une sortie à écrire dans un fichier ou /dev/null. Voir l'édition ci-dessus.

0 votes

Ainsi, cela signifie que si le processus est déjà démarré, il n'y a aucun moyen de rediriger la sortie

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X