it-swarm-ru.tech

Можно ли отсоединить процесс от его терминала? (Или «Я должен был использовать экран!»)

Возможный дубликат:
Могу ли я выполнить Nohup/просмотреть уже запущенный процесс?

В Unix (в частности, в Linux) я начал работу в обычном сеансе ssh-> bash. Я хотел бы уйти с работы в ближайшее время, но теперь я понимаю, что работа займет несколько часов.

Если бы я только начал эту работу на экране, я мог бы отделиться и пойти домой. Но я не сделал.

Есть ли способ отсоединить задание от его сеанса ssh, чтобы я мог выключить свой компьютер (сбросив TCP и прервав сеанс ssh), и все же программа продолжала работать?

Меня не волнует его вывод - фактически я перенаправил стандартный вывод в файл. Я просто хочу, чтобы он работал до конца.

146
mike

Вы можете нажать ctrl-z, чтобы прервать процесс и затем запустить bg, чтобы запустить его в фоновом режиме.

Вы можете отобразить нумерованный список всех процессов, связанных с этим способом, с помощью jobs.

Тогда вы можете запустить disown %1 (заменить 1 с номером процесса, выводимым через jobs), чтобы отсоединить процесс от терминала.

Несмотря на название, процесс все равно будет принадлежать вам после выполнения disown, он будет просто отсоединен от терминала, в котором вы его запустили.

Этот ответ содержит больше информации

201
David Pashley

Я считаю, что команда, которую вы ищете, это "отречься"

21
Seigel
 Используйте 
 Команда Nohup & 
 
 Прекрасно: 
 Root @ index: ~ # Nohup/usr/bin/curl localhost/begemot.php & 
 [1] 894 
 Root @ index: ~ # Nohup: игнорирование ввода и добавление вывода в `Nohup.out '
 
 И выход из этого терминала, задание продолжить, чтобы продолжить ... 
13
Aleksander Demidov

Изнутри вашей оболочки bash:

control+z

Затем, чтобы продолжить работу в фоновом режиме:

bg

Позже вы можете набрать jobs, чтобы увидеть, запущен ли еще ваш процесс.

9
Joe

При использовании reptyr на экране вы можете переместить процесс (или его вывод) на экран.

8
mab

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

http://tlug.dnho.net/?q=node/239 это один из способов сделать это, хотя есть и другие варианты.

Спас меня один или два раза, когда у меня было неожиданное отключение в середине сеанса, и в противном случае я бы забыл начать screen, прежде чем начать что-то многословное.

7
David Spillett

Использование crtl-Z, затем bg или использование & при выполнении команды ненадежно на 100%. В большинстве случаев это будет работать, но в некоторых случаях может работать не так, как ожидалось (использование ввода-вывода, ...).
Экран - это надежное решение.

6
radius

Если вы используете bash, вы можете заподозрить с control-Z и фон с bg.

Контроль работы (от man bash)

 If the operating system on which bash is running supports job 
 control, bash contains facilities to use it.   Typing the  
 suspend  character  (typically ^Z, Control-Z) while a process 
 is running causes that process to be stopped and returns control 
 to bash.  Typing the delayed suspend character (typically ^Y, 
 Control-Y) causes the process  to  be stopped  when  it  
 attempts to read input from the terminal, and control to be 
 returned to bash.

помогите bg

bg: bg [job_spec ...]
    Place each JOB_SPEC in the background, as if it had been started with
    `&'.  If JOB_SPEC is not present, the Shell's notion of the current
    job is used.

справка

jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.
5
Zoredache

Если вы заранее знаете, что хотите запустить его в фоновом режиме, хорошая команда - это команда unix at . Он запускает команды в фоновом режиме в назначенное время, как задание cron, которое не повторяется. В зависимости от вашего дистрибутива вам может потребоваться установить его и запустить демон atd.

4
Sylvain