Comment puis-je reprendre un travail arrêté sous Linux?

344

Comment puis-je reprendre un travail arrêté sous Linux? J'utilisais emacs et j'ai accidentellement appuyé sur ctrl-z, ce qui m'a renvoyé à la console. Je peux le voir quand je tape 'jobs'

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp
Policier
la source
Il s’agit en fait d’un flux de travail assez normal pour Vim. Si vous souhaitez conserver vos commandes dans votre historique de bash, vous devez alors Ctrl-ztaper vos commandes, puis les reprendre. Vous pouvez évidemment exécuter des commandes sans quitter Vim via la :!commande ed
icc97

Réponses:

384

La commande fgest ce que vous voulez utiliser. Vous pouvez également lui attribuer un numéro de travail s'il y a plus d'un travail arrêté.

Ilkka
la source
59
pour référence, fg est "premier plan". Vous pouvez également continuer le travail en arrière-plan avec "bg".
Sirex
261

Les commandes générales de contrôle des tâches sous Linux sont les suivantes:

  • jobs - liste les emplois en cours
  • fg - reprend le travail suivant dans la file d'attente
  • fg% [nombre] - reprend le travail [nombre]
  • bg - Pousse le travail suivant de la file d'attente en arrière-plan
  • bg% [numéro] - Pousse le travail [numéro] en arrière-plan
  • kill% [nombre] - Tue le travail numéroté [nombre]
  • kill - [signal]% [nombre] - envoie le signal [signal] au numéro de travail [nombre]
  • disown% [nombre] - désavoue le processus (plus aucun terminal ne sera propriétaire), la commande sera donc active même après la fermeture du terminal.

C'est à peu près tous. Notez le% infront du numéro de travail dans les commandes - c’est ce qui indique à Kill que vous parlez de travaux et non de processus.

Majenko
la source
30
J'évite "kill% 1" car le fait de taper le mot "kill 1" est vraiment mauvais :)
barrycarter le
5
@barrycarter C'est très vrai. Je fais habituellement un fget un Ctrl-C;)
Majenko
6
@barry: C'est pourquoi init dans Upstart ignore SIG {TERM, KILL} par défaut.
Hello71
7
Et, bien sûr, "ne lancez jamais en tant que root";)
barrycarter le
47

Vous pouvez également taper %<process_name>; c'est-à-dire que vous appuyez sur Ctrl-Z dans emacs, vous pouvez ensuite taper %emacsdans la console et la ramener au premier plan.

NickD
la source
Très bon à savoir
ZAD-Man
33

Juste pour ajouter aux autres réponses, bash vous permet d’ignorer le fgnuméro de travail si vous le spécifiez.

Par exemple, ils sont équivalents et reprennent le dernier travail:

%
%%
fg
fg %

Ceux-ci reprennent le travail n ° 4:

%4
fg 4
Grawity
la source
2
Bien que ce soit plutôt cool, je trouve toujours plus facile de taper fgque %.
rr-
3
%c'est génial, merci! En tant que dactylographe, je trouve fgtrès irritant (même doigt). Mais alors, c'est comme ça cd.
Gauthier
Et vous pouvez commencer en arrière-plan avec l'un bg %ou l' autre % &.
Wildcard
dans mon cas, quand j'ai essayé d'utiliser fg, je vois que le processus arrêté apparaît et disparaît rapidement et que <fg%> a réussi à le restaurer.
Lefi Tarik
20

Si vous ne l'avez pas lancé depuis le terminal actuel, utilisez ps aux | grep <process name>pour trouver le numéro de processus (pid), puis reprenez-le avec:

kill -SIGCONT <pid>

(Malgré son nom, il kills’agit simplement d’un outil permettant d’envoyer un signal au processus, ce qui permet aux processus de communiquer entre eux. Un "signal de suppression" n’est qu’un des nombreux signaux standard.)

Conseil bonus: entourez le premier caractère du nom du processus avec []pour éviter que la grepcommande elle-même n'apparaisse dans les résultats. par exemple, pour trouver un emacsprocessus, utilisezps aux | grep [e]macs

mahemoff
la source
2
Cela fonctionne également si vous désavouez un processus arrêté
mabraham
pouvez-vous aussi avoir accès à ses entrées / sorties comme cela se passe quand vous dites fg?
Ciprian Tomoiagă
C'est une approche beaucoup plus flexible que de travailler avec un numéro d'emploi. Pouces vers le haut.
thomp45793