Могу ли я nohup /screen начать процесс?

Я выполняю несколько тестовых сценариев длительных сценариев миграции данных поверх SSH. Допустим, я начал запускать скрипт около 4 часов вечера; теперь, 6 часов, и я проклинаю себя за то, что я не делаю все это в screen.

Есть ли способ «ретроактивно» nohup процесс или мне нужно оставить свой компьютер онлайн всю ночь? Если невозможно подключить screen к /nohup процесс, который я уже начал, то почему? Что-то связано с тем, как взаимодействуют родительские /дочерние процессы? (Я не буду принимать ответ «нет», который, по крайней мере, не затрагивает вопрос «почему» - извините;))

241 голос | спросил ojrac 12 J0000006Europe/Moscow 2009, 02:53:44

12 ответов


196

Если вы используете Bash, вы можете запустить disown -h job

  

отключить

disown [-ar] [-h] [jobspec ...]
     

Без параметров каждый параметр занятости исключается из таблицы активных заданий.   Если указан параметр -h, задание   не удаляется из таблицы, но   отмечен так, что SIGHUP не отправляется   задание, если оболочка получает   SIGHUP. Если jobspec нет, и   ни параметр -a, ни -r не является   , используется текущее задание. Если   no jobspec не поставляется, -a   опция означает удалить или пометить все   рабочие места; параметр -r без   Аргумент jobspec ограничивает операцию   для выполнения заданий.

ответил gharper 12 J0000006Europe/Moscow 2009, 03:03:32
77

Используйте reptyr

Из README:

reptyr - A tool for "re-ptying" programs.
-----------------------------------------

reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.

USAGE
-----

  reptyr PID

"reptyr PID" will grab the process with id PID and attach it to your
current terminal.

After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)

Несколько сообщений в блоге от его автора:

ответил Jonathan Tran 23 Mayam11 2011, 01:27:31
22

Чтобы украсть процесс с одного tty до текущего tty, вы можете попробовать этот хак:

http://www.ucc.asn.au/~dagobah/вещи /grab.c

Он нуждается в переформатировании, чтобы скомпилировать текущие версии Linux /glibc, но все же работает.

ответил Juliano 12 J0000006Europe/Moscow 2009, 09:38:03
16

Когда процесс начинается, STDIN, STDOUT и STDERR подключаются к чем-то . Как правило, вы не можете изменить это после запуска команды. В случае, которое вы описываете, это, вероятно, tty, связанное с сеансом ssh. nohup в значительной степени просто ...

command < /dev/null > nohup.out 2>&1

То есть, устанавливает STDIN в /dev /null, STDOUT в файл и STDERR в STDOUT. Экран делает гораздо более сложные вещи, связанные с настройкой ttys, которые направляют на себя.

Я не знаю никакого способа ретроактивно nohup или скрининга текущего процесса. Если вы подключились к /proc /$ pid /fd и посмотрели, что 0, 1 и 2 указывают на.

Возможно, вам удастся отказаться, но нет, если процесс пытается что-либо сделать с помощью STDIN, STDOUT или STDERR.

ответил freiheit 12 J0000006Europe/Moscow 2009, 03:04:10
12

Cryopid - это еще одна разработка от автора grab.c, которая замораживает процесс в файл, который вы затем запускаете (внутри экрана), чтобы возобновить процесс.

ответил TRS-80 14 J0000006Europe/Moscow 2009, 22:26:06
11

Я могу дать вам простое «Нет» без объяснения причин для части экрана, меня бы интересовала причина, по которой ты сам.

Однако вы пробовали disown (встроенный bash)

~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
     By default, removes each JOBSPEC argument from the table of active jobs.
    If the -h option is given, the job is not removed from the table, but is
    marked so that SIGHUP is not sent to the job if the shell receives a
    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
    jobs from the job table; the -r option means to remove only running jobs.
ответил serverhorror 12 J0000006Europe/Moscow 2009, 03:02:34
9

nohup на Solaris /OpenSolaris имеет флаг -p для nohup запущенного процесса - например, см. страница Solaris 10 nohup .

ответил alanc 13 J0000006Europe/Moscow 2009, 04:59:20
5

Недавно я увидел ссылку на neercs , которая представляет собой экранную утилиту, созданную с использованием libcaca, цветная библиотека ascii-art. Среди других функций он может похвастаться возможностью захватить существующий процесс и переустановить его в сеансе neercs (screen).

Я не использовал его, однако, я не могу комментировать, работает он или нет.

ответил Daniel Lawson 15 J0000006Europe/Moscow 2009, 01:03:02
2

Я, вероятно, недооцениваю это, поэтому не стесняйтесь исправлять меня (я уже узнал об отключении!) ... Не было бы ctrl-Z и «bg» работать, по крайней мере, чтобы процесс работал в фоновом режиме ? Или это ключевая проблема, по которой вы все равно хотите видеть STDOUT во время ее запуска?

ответил Chris_K 12 J0000006Europe/Moscow 2009, 03:08:58
2

Если вы можете жить, не имея возможности взаимодействовать с процессом, и вы не возражаете против загрузки случайных модулей ядра, вы можете сделать хуже, чем смотреть Snoop . Кроме того, есть еще несколько проектов. Здесь - это один код вызова, которые в основном могут делать то, что вы хотите сделать.

ответил David Pashley 12 J0000006Europe/Moscow 2009, 03:35:40
1

Я хотел использовать nohup (или аналогичный), чтобы запустить браузер командной строки links и подключиться к нему после загрузки файла с веб-сайта ASP.NET с помощью сложный процесс аутентификации и много скрытого состояния просмотра, из-за которого трудно использовать задание с помощью curl /wget.

Наконец я закончил использование tmux, который решил работу просто отлично:

  1. Запустите tmux
  2. Запустите приложение (links в моем случае) и оставьте его
  3. Закрыть сеанс SSH, приложение будет работать
  4. Затем подключитесь к SSH на один и тот же компьютер и запустите tmux attach, чтобы вернуть приложение на экран
ответил Dmitry Gusev 17 PM00000070000001931 2017, 19:18:19
-1

Разве ты беспокоишься о тайм-ауте сеанса? В этом случае вы можете Ctrl-z и bg выполнить этот процесс, а затем просто положить что-нибудь, чтобы сохранить сеанс живым, как «ping -t localhost» или «top».

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

ответил TrojanName 12 J0000006Europe/Moscow 2009, 03:58:04

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132