Я делаю несколько тестовых прогонов долгосрочных сценариев переноса данных через SSH. Допустим, я начинаю запускать сценарий около 16:00; сейчас 6 вечера катается, и я проклинаю себя за то, что не сделал все это screen
.
Есть ли какой-нибудь способ «задним числом» nohup
процесса или мне нужно оставить компьютер включенным всю ночь? Если невозможно подключиться screen
к / nohup
процессу, который я уже начал, то почему? Как-то связано с тем, как взаимодействует родитель / ребенок? (Я не приму ответ «нет», который по крайней мере не отвечает на вопрос «почему» - извините;))
disown
. blogs.oracle.com/ksplice/entry/disown_zombie_children_and_theОтветы:
Если вы используете Bash, вы можете запустить
disown -h job
источник
disown %1
если 1 - этоbg 1
спецификацияИспользуйте reptyr
Из README:
Несколько сообщений в блоге его автора:
источник
Чтобы украсть процесс от одного tty до вашего текущего tty, вы можете попробовать этот хак:
http://www.ucc.asn.au/~dagobah/things/grab.c
Он нуждается в некотором переформатировании, чтобы скомпилировать в текущие версии Linux / glibc, но все еще работает.
источник
Когда процесс начинается, STDIN, STDOUT и STDERR подключаются к чему-либо . Как правило, вы не можете изменить это после запуска команды. В случае, если вы описываете, это, вероятно, tty, связанный с сессией ssh. nohup в значительной степени просто делает ...
То есть устанавливает STDIN в / dev / null, STDOUT в файл и STDERR в STDOUT. Экран делает гораздо более сложные вещи, включая настройку ttys, которые направлены на себя.
Я не знаю ни одного способа задним числом nohup или скрининга запущенного процесса. Если вы перейдете в / proc / $ pid / fd и увидите, на что указывают 0, 1 и 2.
Вы можете испытать удачу с отречением, но не в том случае, если процесс пытается что-либо сделать с STDIN, STDOUT или STDERR.
источник
Cryopid - это дальнейшее развитие от автора grab.c, который замораживает процесс в файл, который вы затем запускаете (внутри экрана), чтобы возобновить процесс.
источник
Я могу только дать вам простое «Нет» без объяснения, почему для экранной части я бы сам был заинтересован в причине.
Однако вы пробовали
disown
(встроенный Bash)источник
nohup в Solaris / OpenSolaris имеет флаг -p для nohup запущенного процесса - например, см. справочную страницу nohup Solaris 10 .
источник
Недавно я увидел ссылку на neercs , похожую на экран утилиту, созданную с использованием libcaca, библиотеки цветов ascii-art. Среди других функций, он может похвастаться возможностью захватить существующий процесс и переопределить его внутри сеанса neercs (экран).
Однако я не использовал его, поэтому не могу комментировать, работает он или нет.
источник
Я, вероятно, недооцениваю это, так что не стесняйтесь поправлять меня (я уже узнал об отречении!) ... Не сработали бы ctrl-Z и "bg", чтобы хотя бы запустить процесс в фоновом режиме? Или это ключевой вопрос, который вы все еще хотели бы видеть в STDOUT во время его работы?
источник
Если вы можете жить, не имея возможности взаимодействовать с процессом, и не возражаете против загрузки случайных модулей ядра, вы можете сделать хуже, чем смотреть на Snoop . Кроме того, есть несколько других проектов. Вот один вызов injcode, который в основном может делать то, что вы хотите.
источник
Вы можете перенаправить вывод процесса в файл с помощью GDB
https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux
а затем отречься от него
Upd: мне пришлось запустить gdb с помощью sudo и немного другой команды gdb в Ubuntu 18.04:
p (int)dup2(open("/tmp/test.stdout", 1), 1)
источник
Я хотел использовать
nohup
(или подобное), чтобы запуститьlinks
браузер командной строки и присоединить к нему после загрузки файла с веб-сайта ASP.NET со сложным процессом аутентификации и большим количеством скрытого состояния просмотра, что затрудняло использование для выполнения работы сcurl
/wget
.Я, наконец, закончил тем, что использовал
tmux
работу, которая отлично справилась:tmux
links
в моем случае) и оставьте его запущеннымtmux attach
чтобы вернуть приложение на экранисточник
Это то, что вы беспокоитесь о времени ожидания сессии? В этом случае вы можете нажать Ctrl-z и bg процесса, а затем просто положить что-нибудь, чтобы сохранить сеанс, как "ping -t localhost" или "top".
Если это то, что вы хотите выйти из системы, то, боюсь, я не смогу добавить другие комментарии.
источник