Могу я nohup/screen уже запущенный процесс?

/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

Вот объяснение:

find ./ -type f

находят только файл, не, файл фильтра каталога

grep -E ".*\.[a-zA-Z0-9]*$"

с расширением

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

удаляет путь и имя файла, сохраняет только расширение

sort | uniq -c | sort -n

вид, uniq и вид

261
задан 12 June 2009 в 03:14
13 ответов

При использовании Bash можно работать disown -h job

отрицать

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

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

212
ответ дан 28 November 2019 в 19:13
  • 1
    Потрясающе; Я надеялся, что что-то вроде этого поднимется. –  ojrac 12 June 2009 в 03:13
  • 2
    Жизнь может быть несправедливой. gharper и я отправляли это приблизительно в то же время :) –  serverhorror 12 June 2009 в 10:02
  • 3
    Вы - мой герой –  Thomas Dignan 9 July 2010 в 04:42

Если можно жить с неспособностью взаимодействовать с процессом, и Вы не возражаете против загрузки случайных модулей ядра, Вы могли сделать хуже, чем посмотреть на Ищейку. С другой стороны, существует несколько других проектов. Вот один вызов injcode, который может главным образом сделать то, что Вы хотите сделать.

2
ответ дан 28 November 2019 в 19:13

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

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

-1
ответ дан 28 November 2019 в 19:13
  • 1
    It' s вещь выхода из системы. –  ojrac 12 June 2009 в 03:10
  • 2
    Другой способ остановить его разъединение состоит в том, чтобы выполнить вершину. THat' s всегда shuffeling несколько байтов вокруг. –  Rory 5 August 2009 в 01:55

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

2
ответ дан 28 November 2019 в 19:13
  • 1
    Это все еще уничтожило бы процесс, когда владение tty умирает так, OP должен оставить поле, где он инициировал выполнение команды, которое является тем, чего он хочет избежать –  serverhorror 12 June 2009 в 02:11
  • 2
    Хорошо I' ll покупают это. Спасибо за объяснение. Так отрицание-h предложения верный взгляд, намного более умный, чем шахта :-) –  Chris_K 12 June 2009 в 02:15

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

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

5
ответ дан 28 November 2019 в 19:13

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

Однако имейте Вас попробованный disown (встроенный удар)

~ $ 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.
12
ответ дан 28 November 2019 в 19:13

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

13
ответ дан 28 November 2019 в 19:13
  • 1
    Мило! Я пытался использовать cryopid в своем master' s диссертация о миграции процесса, но этому не удалось работать все времена, независимо от того, что я сделал. В конце я должен был использовать dynckpt с древней версией Linux. Вы, возможно, вовлечены в разработку cryopid? Я вижу, что Ваше имя является аналогичным author' s домен. –  Juliano 14 June 2009 в 21:43
  • 2
    I' m не вовлеченный в разработку, я просто знаю автора из университета. Он doesn' t имеют время для поддержания cryopid в данный момент, таким образом, похоже, что некоторые люди начали работать над ним в sharesource.org/project/cryopid –  TRS-80 14 June 2009 в 22:10

Для кражи процесса от одного tty до текущего tty можно хотеть попробовать этот взлом:

http://www.ucc.asn.au/~dagobah/things/grab.c

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

22
ответ дан 28 November 2019 в 19:13

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

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

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

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

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

16
ответ дан 28 November 2019 в 19:13
  • 1
    +1 для хороших комментариев. Св. (din|out|err) является другой половиной проблемы, и я ценю совет относительно того, где начать смотреть, в следующий раз I' m в этом заторе. –  ojrac 12 June 2009 в 06:25
  • 2
    На самом деле можно изменить его на большей части Unixes. It' s отвратительный взлом.Мне очень нравится.:) То, что Вы делаете, подключение к процессу с помощью поддержки отладки как ptrace, затем вынудите процесс назвать dup2 () для повторного подключения 0,1,2 с другим дескриптором файла. –  Zan Lynx 16 June 2009 в 23:07

nohup на Solaris/OpenSolaris имеет флаг-p к nohup рабочий процесс - например, см. Солярис 10 nohup страниц справочника.

9
ответ дан 28 November 2019 в 19:13

Используйте 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.)

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

82
ответ дан 28 November 2019 в 19:13

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

В конце концов я использовал tmux , который отлично справился с задачей:

  1. Запустите tmux
  2. Запустите приложение ( ссылки в моем случае) и оставьте его запущенным
  3. Закройте сеанс SSH, приложение будет продолжать работать
  4. Подключитесь через SSH к той же машине позже и запустите tmux attach , чтобы вернуть приложение на экран
1
ответ дан 28 November 2019 в 19:13

Proses çıxışı yönləndirə bilərsiniz gdb

ilə fayl https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux

və sonra onu inkar et

Güncelleme : Ubuntu 18.04-də sudo və bir az fərqli gdb əmri ilə gdb çalıştırmalı idim:

p (int) dup2 (open ("/ tmp / test.stdout", 1), 1)

2
ответ дан 28 November 2019 в 19:13

Теги

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