Jak mogę wznowić zatrzymane zadanie w systemie Linux?


342

Jak mogę wznowić zatrzymane zadanie w systemie Linux? Używałem emacsa i przypadkowo nacisnąłem ctrl-z, co rzuciło mnie z powrotem na konsolę. Widzę to po wpisaniu „zleceń”

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

W rzeczywistości jest to dość normalny proces pracy dla Vima, jeśli chcesz zachować polecenia w historii basha, naciśnij Ctrl-zwpisane polecenia, a następnie wznów. Oczywiście możesz uruchamiać polecenia bez wychodzenia z Vima za pomocą :!polecenia ed
icc97

Odpowiedzi:


381

Polecenie fgjest tym, czego chcesz użyć. Możesz także nadać mu numer zadania, jeśli istnieje więcej niż jedno zatrzymane zadanie.


59
dla porównania, fg jest „pierwszym planem”. Możesz także kontynuować pracę w tle za pomocą „bg”.
Sirex,

260

Ogólne polecenia kontroli zadań w systemie Linux to:

  • zadania - lista aktualnych zadań
  • fg - wznów zadanie, które będzie następne w kolejce
  • fg% [liczba] - wznów pracę [liczba]
  • bg - Wciśnij następne zadanie w kolejce w tło
  • bg% [liczba] - Wciśnij zadanie [numer] w tło
  • kill% [liczba] - Zabij zadanie o numerze [liczba]
  • kill - [sygnał]% [liczba] - Wyślij sygnał [sygnał] na numer zadania [numer]
  • disown% [liczba] - odrzuca proces (nie będzie już właścicielem terminala), więc polecenie będzie aktywne nawet po zamknięciu terminala.

To prawie wszystkie z nich. Zwróć uwagę na% przed numerem zadania w poleceniach - to mówi zabić, że mówisz o zadaniach, a nie procesach.


30
Unikam „kill% 1” z powodu pomyłki go jako „zabić 1” jest naprawdę bardzo złe :)
barrycarter

5
@barrycarter To bardzo prawda. Zwykle robię an fga Ctrl-C;)
Majenko

6
@barry: Dlatego domyślnie init w Upstart ignoruje SIG {TERM, KILL}.
Cześć71,

7
I, oczywiście, „nigdy nie uruchamiaj jako root”;)
barrycarter

47

Możesz także pisać %<process_name>; tzn. naciskasz Ctrl-Z w emacsie, a następnie możesz wpisać %emacskonsolę i przenieść ją z powrotem na pierwszy plan.


Bardzo dobrze wiedzieć
ZAD-Man

33

Aby dodać do innych odpowiedzi, bash pozwala pominąć, fgjeśli podasz numer zadania.

Na przykład są one równoważne i wznawiają najnowszą pracę:

%
%%
fg
fg %

Wznawiają pracę nr 4:

%4
fg 4

2
Chociaż jest to całkiem fajne, nadal łatwiej mi pisać fgniż %.
rr-

3
%jest niesamowity, dzięki! Jako maszynistka dotykowa uważam za fgbardzo irytujące (ten sam palec). Ale tak też jest cd.
Gauthier

Możesz uruchomić go w tle za pomocą jednego bg %lub tylko jednego % &.
Wildcard,

w moim przypadku, gdy próbowałem użyć fg, widzę, że zatrzymany proces pojawia się i znika szybko i po prostu <fg%> udało się go przywrócić.
Lefi Tarik

20

Jeśli nie uruchomiłeś go z bieżącego terminala, użyj, ps aux | grep <process name>aby znaleźć numer procesu (pid), a następnie wznów go za pomocą:

kill -SIGCONT <pid>

(Mimo nazwy killjest po prostu narzędziem do wysyłania sygnału do procesu, umożliwiającym procesom komunikację ze sobą. „Sygnał zabicia” jest tylko jednym z wielu standardowych sygnałów.)

Dodatkowa wskazówka: zawiń pierwszy znak nazwy procesu, []aby zapobiec greppojawianiu się samego polecenia w wynikach. np. aby znaleźć emacsproces, użyjps aux | grep [e]macs


2
Działa to również, jeśli
odrzucasz

czy możesz również uzyskać dostęp do jego wejścia / wyjścia, co dzieje się, gdy mówisz fg?
Ciprian Tomoiagă

Jest to znacznie bardziej elastyczne podejście niż praca z numerem zadania. Kciuki w górę.
thomp45793
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.