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
Konstabl
źródło
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.

Ilkka
źródło
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.

Majenko
źródło
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.

NickD
źródło
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
grawitacja
źródło
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

mahemoff
źródło
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