1

У меня проблема с возобновлением процессов.

Когда я пытался вывести процесс на первый план с помощью jobs , он работает, но если я закрываю оболочку и запускаю ее снова, мой процесс не отображается в списке заданий.

Я знаю только имя процесса и его идентификатор. Как я могу получить это на передний план?

5 ответов5

7

Я думаю, что как только вы отключите свой терминал от процесса, выйдя из системы, вы потеряете возможность повторного подключения. Если вы не используете такую утилиту, как screen, для управления своими сессиями.

Это может помочь ....

https://unix.stackexchange.com/questions/31824/how-to-attach-terminal-to-detached-process

2

Если вы начнете процесс изначально, используя screen вы можете подключить его позже:

  1. Запустить screen -D -R
  2. Запустите вашу команду там.
  3. Нажмите Ctrl A затем D чтобы отключиться от screen . Процесс продолжится и вы вернетесь к исходной оболочке.

Затем, позже, с любого терминала:

  1. Запустить screen -D -R
  2. Вы вернетесь в экранную оболочку, где ваша программа будет запущена ранее.

Если процесс уже запущен или у вас нет возможности запустить его через screen , существует также инструмент под названием reptyr который может это сделать. Вы можете использовать его в существующем процессе, затем закрыть терминал, затем открыть новый терминал и использовать его для повторного присоединения существующего процесса к новому терминалу.

2

Предполагая, что вы не используете screen и что процесс был остановлен с использованием сигнала "SIGTSTP" или "SIGSTOP", вы всегда можете попытаться отправить сигнал "ПРОДОЛЖИТЬ" процессу следующим образом:

kill -SIGCONT $PID

где $PID - это идентификатор вашего процесса.

1

Когда вы закрываете терминал, процесс отправляет SIGHUP , сигнал зависания. Если вы не используете такую утилиту, как screen или nohup , или если программа работает особенно странно, SIGHUP приведет к постепенному завершению процесса.

0

Если вы выбросили процесс в фоновый режим, вы можете просто набрать fg, чтобы продолжить с того места, на котором остановились, в противном случае вы можете отказаться от программы, открыть экран, заново подключить PID с помощью экрана и, наконец, использовать reptyr, чтобы вернуть процесс, находясь на экране

$ disown yourprogram          # Detach yourprogram from the shell
$ screen                      # Launch screen
$ reptyr $(pgrep yourprogram) # Get back the process

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .