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

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


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.


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.


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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.