Як відновити функціональність терміналу після видачі команди «призупинити»?


8

Я набрав suspendсвій термінал, і це призупинило виконання.

Як повернутися до нормального функціонування терміналу? Я спробував Ctrl+ C, Ctrl+ D, Ctrl+ Q( як тут запропоновано ) та Ctrl+ Z, але жодне з цих не працює. Звичайно, я можу закрити термінал і відкрити новий, але чи немає способу "відновити" функціонал терміналу?

Я запускаю Ubuntu GNOME 16.04 з оболонкою (bash) за замовчуванням.


Вибачте за те, що я прошу тут, але яка мета цієї команди?
pa4080

1
Щоб припинити виконання сценарію і продовжити його пізніше;)
Rinzwind

Відповіді:


10

З вашого посилання:

поки він не отримає сигнал SIGCONT.

Так було б kill -SIGCONT {pid}

  • killall -CONT bash відновив би все.
  • kill -18 {pid} було б те саме.
  • так і є kill -s CONT {pid}

Відповідно до цього списку, він повинен бути control-z, але вам потрібно використовувати control-z для зупинки процесу:

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

Вам потрібен {pid} сеансу оболонки, який працює в терміналі


Також є команди управління роботою :

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.

Це також повинен бути Ctrl + Q, але це чомусь не працює. Я припускаю, оскільки оскільки оболонка призупинена, вона не може приймати Ctrl + Q (SIGCONT) від призупиненого сеансу. Це працює, якщо, як ви кажете, ви використовуєте, kill -SIGCONT PIDале я не можу знайти простий спосіб отримати PID призупиненого сеансу, коли у мене відкрито багато терміналів.
тердон

Це не працює. Я використав ps aux | grep термін, щоб отримати pid терміналу, спробував усі 3 варіанти SIGCONT, але жодна не працювала. Коли я просто вбив pid, термінал закрився, тому у мене був правильний pid.
Цербер

@Cerberus ви хочете, щоб PID сеансу оболонки, що працює в терміналі, а не самого терміналу. Якщо у вас є лише один відкритий термінал, його слід легко знайти pgrep bash. Якщо ні, використовуйте pstree -p, знайдіть там PID терміналу і подивіться PID-адреси його дітей, одним з яких повинен бути ваш баш-сеанс.
тердон

Мені потрібно мати два термінальні сеанси, принаймні у сценарії, один, який призупинено, а інший, з якого надсилати SIGCONT.
Цербер

1
SIGCONT зазвичай ігнорується, то чому б не просто стріляти killall -CONT bash? :-)
Йонас Шефер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.