Если вы ^ Z из процесса, он «останавливается». Как вы переключаетесь обратно?

83

Я случайно «остановил» свой telnetпроцесс. Теперь я не могу ни «переключиться обратно», ни убить его (он не будет отвечать kill 92929, где 92929 - это процесс).

Итак, мой вопрос: если у вас остановлен процесс в командной строке Linux, как вы переключаетесь на него или убиваете его, не прибегая к помощи kill -9?

bobobobo
источник

Ответы:

92

Самый простой способ - запустить его, fgчтобы вывести его на передний план:

$ help fg
fg: fg [job_spec]
    Move job to the foreground.

    Place the job identified by JOB_SPEC in the foreground, making it the
    current job.  If JOB_SPEC is not present, the shell's notion of the
    current job is used.

    Exit Status:
    Status of command placed in foreground, or failure if an error occurs.

Кроме того, вы можете запустить его, bgчтобы продолжить в фоновом режиме:

$ help bg
bg: bg [job_spec ...]
    Move jobs to the background.

    Place the jobs identified by each JOB_SPEC in the background, as if they
    had been started with `&'.  If JOB_SPEC is not present, the shell's notion
    of the current job is used.

    Exit Status:
    Returns success unless job control is not enabled or an error occurs.

Если вы только что нажали Ctrl Z, чтобы вернуть задание, просто запустите fgбез аргументов.

Тердон
источник
Спасибо!! Я полагаю, что это эквивалент Alt + Tab. Вы знаете, что случилось, как только я сделал, fg telnetхотя. Он сказал Terminated, предположительно, б / к моего предыдущего killcmd.
бобобо
@bobobobo предположительно, да. В любом случае, fgаргументы не нужны. Если вы только что нажали ^Z, запустите fgв том же терминале, и он вернет 1-е задание.
Terdon
48

Вы можете использовать, jobsчтобы перечислить приостановленный процесс. Возьми пример. Начните с процесса:

$ sleep 3000  

Затем вы приостанавливаете процесс:

^Z
[1]+  Stopped                 sleep 3000

Вы можете перечислить процесс:

$ jobs
[1]+  Stopped                 sleep 3000

и вернуть его на передний план:

$ fg %1
sleep 3000

В %1соответствует [1]перечисленному с jobsкомандой.

Луис
источник
19

Вы должны иметь возможность перезапустить приостановленный процесс, используя killкоманду для отправки процессу сигнала CONTINUE из командной строки, таким образом:

kill -CONT 92929
Geeb
источник
1
Это заставит его возобновить работу, но не будет выведен на передний план.
багамат
1
@bahamat Да, вполне верно. Еще бы нужно было fgвнутри оригинального терминала. Мне нравится -STOP и -CONT графические программы для экономии ресурсов, но они все равно эффективно работают в фоновом режиме.
Geeb
В случае sleepэтого будет killпроцесс, который не тот, который вы хотите ..;)
Тимо