Come posso riprendere un lavoro interrotto in Linux?


344

Come posso riprendere un lavoro interrotto in Linux? Stavo usando emacs e ho premuto accidentalmente ctrl-z che mi ha riportato alla console. Lo vedo quando scrivo "lavori"

[*****]$ jobs
[1]+  Stopped                 emacs test_queue.cpp

Questo è in realtà un flusso di lavoro abbastanza normale per Vim, se vuoi mantenere i tuoi comandi nella cronologia di bash, quindi premi Ctrl-zdigita i tuoi comandi e poi riprendi. Ovviamente puoi eseguire i comandi senza lasciare Vim tramite il :!comando ed
icc97

Risposte:


383

Il comando fgè quello che vuoi usare. È inoltre possibile assegnargli un numero di lavoro se sono presenti più lavori bloccati.


59
per riferimento, fg è "primo piano". Puoi anche continuare il lavoro in background con "bg".
Sirex,

261

I comandi generali di controllo dei lavori in Linux sono:

  • lavori : elenca i lavori correnti
  • fg - riprende il lavoro successivo nella coda
  • fg% [numero] - riprendi lavoro [numero]
  • bg - Sposta il lavoro successivo nella coda in background
  • bg% [numero] - Sposta il lavoro [numero] in background
  • kill% [numero] - Termina il lavoro numerato [numero]
  • kill - [signal]% [number] - Invia il segnale [signal] al numero di lavoro [number]
  • disown% [numero] - rinnega il processo (non sarà più proprietario del terminale), quindi il comando sarà attivo anche dopo aver chiuso il terminale.

Sono praticamente tutti quanti. Nota la% davanti al numero del lavoro nei comandi: questo è ciò che dice a kill che stai parlando di lavori e non di processi.


30
Evito "kill% 1" perché digitarlo come "kill 1" è davvero pessimo :)
barrycarter

5
@barrycarter È vero. Di solito faccio un fge un Ctrl-C;)
Majenko

6
@barry: ecco perché init in Upstart ignora SIG {TERM, KILL} per impostazione predefinita.
Ciao, il

7
E, naturalmente, "never run as root";)
barrycarter,

47

Puoi anche digitare %<process_name>; cioè, premi Ctrl-Z in emacs, quindi puoi digitare %emacsnella console e riportarlo in primo piano.


Molto buono a sapersi
ZAD-Man il

33

Solo per aggiungere alle altre risposte, bash ti consente di saltare il fgse specifichi un numero di lavoro.

Ad esempio, questi sono equivalenti e riprendono l'ultimo lavoro:

%
%%
fg
fg %

Questi riprendono il lavoro n. 4:

%4
fg 4

2
Mentre questo è un po 'bello, trovo ancora più facile da scrivere fgdi %.
r-

3
%è fantastico, grazie! Come dattilografo, trovo fgmolto irritante (stesso dito). Ma anche così cd.
Gauthier,

E puoi avviarlo in background con uno bg %o solo % &.
Carattere jolly

nel mio caso quando ho provato a usare fg vedo che il processo interrotto appare e scompare rapidamente e solo <fg%> è riuscito a ripristinarlo.
Lefi Tarik,

20

Se non è stato avviato dal terminale corrente, utilizzare ps aux | grep <process name>per trovare il numero di processo (pid), quindi riprenderlo con:

kill -SIGCONT <pid>

(Nonostante il nome, killè semplicemente uno strumento per inviare un segnale al processo, consentendo ai processi di comunicare tra loro. Un "segnale di interruzione" è solo uno dei molti segnali standard.)

Suggerimento bonus: avvolgi il primo carattere del nome del processo []per evitare che il grepcomando stesso compaia nei risultati. ad esempio per trovare il emacsprocesso, utilizzareps aux | grep [e]macs


2
Questo funziona anche se rinneghi un processo interrotto
mabraham

puoi anche avere accesso al suo input / output come succede quando dici fg?
Ciprian Tomoiagă,

Questo è un approccio molto più flessibile rispetto a lavorare con il numero di lavoro. Pollice su.
thomp45793,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.