Jak wznowić funkcjonalność terminala po wydaniu polecenia „zawiesić”?

8

Wpisałem suspendterminal i zawiesiło to wykonanie.

Jak wrócić do normalnego funkcjonowania terminala? Próbowałem Ctrl+ C, Ctrl+ D, Ctrl+ Q( zgodnie z sugestią tutaj ) i Ctrl+ Z, ale żadna z nich nie działa. Oczywiście mogę zamknąć terminal i otworzyć nowy, ale czy nie ma możliwości „wznowienia” funkcjonalności terminalu?

Używam Ubuntu GNOME 16.04 z domyślną powłoką (bash).

Cerberus
źródło
Przepraszam za to, pytam tutaj, ale jaki jest cel tego polecenia?
pa4080
1
Aby zatrzymać wykonywanie skryptu i pozwolić mu kontynuować;)
Rinzwind

Odpowiedzi:

10

Z Twojego linku:

dopóki nie otrzyma sygnału SIGCONT.

Tak by było kill -SIGCONT {pid}

  • killall -CONT bash wznowiłby wszystko.
  • kill -18 {pid} byłoby tak samo.
  • tak więc jest kill -s CONT {pid}

Zgodnie z tą listą powinien to być control-z, ale musisz użyć control-z, aby zatrzymać proces:

18 - SIGCONT - Resume process, ctrl-Z (2nd)
19 - SIGSTOP - Pause the process / free command line, ctrl-Z (1st)

Potrzebujesz {pid} sesji powłoki uruchomionej w terminalu


Są też polecenia kontroli zadań :

fg, bg

The fg command switches a job running in the background into the foreground. 
The bg command restarts a suspended job, and runs it in the background. 
If no job number is specified, then the fg or bg command acts 
upon the currently running job.
Rinzwind
źródło
Powinien to również być Ctrl + Q, ale z jakiegoś powodu to nie działa. Zakładam, ponieważ ponieważ powłoka jest zawieszona, nie może odbierać Ctrl + Q (SIGCONT) z zawieszonej sesji. Działa, jeśli, jak mówisz, używasz, kill -SIGCONT PIDale nie mogę znaleźć prostego sposobu na uzyskanie PID zawieszonej sesji, gdy mam wiele otwartych terminali.
terdon
To nie działa. Użyłem ps aux | grep, aby uzyskać pid terminala, wypróbowałem wszystkie 3 warianty SIGCONT, ale żadna nie działała. Kiedy właśnie zabiłem pid, terminal zamknął się, więc miałem prawidłowy pid.
Cerberus,
@ Kerberus chcesz, aby PID sesji powłoki działał w terminalu, a nie samego terminalu. Jeśli masz tylko jeden otwarty terminal, powinno być łatwo go znaleźć pgrep bash. Jeśli nie, użyj pstree -p, znajdź tam PID terminala i spójrz na PID jego dzieci, z których jednym powinna być twoja sesja bash.
terdon
Będę musiał mieć dwie sesje terminalowe przynajmniej w scenariuszu, jedną zawieszoną, a drugą wysyłającą SIGCONT.
Cerberus,
1
SIGCONT jest zwykle ignorowany, więc dlaczego po prostu nie strzelać killall -CONT bash? :-)
Jonas Schäfer