Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

В этом ответе есть дополнительная информация

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

Use
nohup command &

Is beautiful:
root@index:~# nohup /usr/bin/curl localhost/begemot.php &
[1] 894
root@index:~# nohup: ignoring input and appending output to `nohup.out'

and exit of this terminal, a task proceed to be continued...

Изнутри оболочки bash:

control+z

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

bg

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

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

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

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

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

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

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

Контроль работы (от человека 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.

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