Как получить список программ, работающих с nohup

81

Я получаю доступ к серверу с CentOS (дистрибутив Linux) через SSH-соединение. Поскольку я не могу всегда оставаться в системе, я использую "nohup [command] &" для запуска своих программ.

Я не мог найти, как получить список всех программ, которые я начал использовать nohup. «Работа» срабатывает только до того, как я выйду из системы. После этого, если я снова войду в систему, команда jobs ничего не покажет мне, но я вижу в своих файлах журнала, что мои программы все еще работают.

Есть ли способ получить список всех программ, которые я начал использовать "nohup"?

Нильс Де Винтер
источник
Нашел отличную статью, которая может помочь с вопросом: cyberciti.biz/faq/… . Самое главное, полезно, если вы можете интерпретировать вывод команды ps, особенно столбец stat. Если вы этого не сделаете, прочтите статью СЕЙЧАС ;-)
jumping_monkey 01

Ответы:

115

Когда я начал $ nohup storm dev-zookeper,

МЕТОД1: использование jobs,

prayagupd@prayagupd:/home/vmfest# jobs -l
[1]+ 11129 Running                 nohup ~/bin/storm/bin/storm dev-zookeeper &

МЕТОД2: используя psкоманду.

$ ps xw
PID  TTY      STAT   TIME COMMAND
1031 tty1     Ss+    0:00 /sbin/getty -8 38400 tty1
10582 ?        S      0:01 [kworker/0:0]
10826 ?        Sl     0:18 java -server -Dstorm.options= -Dstorm.home=/root/bin/storm -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dsto
10853 ?        Ss     0:00 sshd: vmfest [priv] 

Столбец TTY со знаком ?=>nohup запущенными программами.

Описание

  • Столбец TTY = терминал, связанный с процессом
  • Столбец STAT = состояние процесса
    • S = прерывистый сон (ожидание завершения события)
    • l = многопоточный (с использованием CLONE_THREAD, как это делают pthreads NPTL)

Справка

$ man ps # затем поиск /PROCESS STATE CODES

прайагупд
источник
5
Метод 2 не перечисляет программы, с которыми были запущеныnohup . В нем перечислены процессы, которые не прикреплены к TTY, что совсем другое дело: процессы, запущенные с, nohupостаются прикрепленными к своему родительскому TTY, пока он не будет закрыт; процессы, не подключенные к TTY, не обязательно запускались nohup. Таким образом, метод 2 перечисляет среди других процессов некоторые программы, работающие с nohup.
Arcturus B
4
jobs не работают для меня, работают только для одного и того же сеанса ssh, если я отключусь и подключусь снова, он больше не будет перечислять ранее указанный запущенный процесс nohup
Mojimi
29

Вместо этого nohupвы должны использоватьscreen . Это дает тот же результат - ваши команды работают «отдельно». Однако вы можете возобновить сеансы экрана и вернуться в их «скрытый» терминал и увидеть недавний прогресс внутри этого терминала.

screenесть много вариантов. Чаще всего использую такие:

Чтобы начать сеанс первого экрана или заменить последний отключенный:

screen -Rd 

Чтобы отключиться от текущего сеанса: Ctrl+ACtrl+D

Вы также можете запустить несколько экранов - прочтите документацию.

mvp
источник
6
Похоже, это хорошая альтернатива мне. Я также обнаружил, что могу найти PID с помощью «ps auwx»
Нильс Де Винтер
7
Вопрос четко задается. Есть ли способ получить список всех программ, которые я начал использовать "nohup"? , но этот ответ даже немного не отвечает на вопрос. Почему это принято?
Люк Джошуа Парк,
3
Потому что еще в 2013 году это был единственный ответ, который помог.
Нильс Де Винтер
21

Если у вас есть стандартное перенаправление вывода на "nohup.out", просто посмотрите, кто использует этот файл.

lsof | grep nohup.out
Виктор Мельников
источник
1
Это разумный способ. Но в моем случае это не дает результатов. Хотя я уверен, что команда nohup все еще работает и использует файл nohup.out.
Юлиус Ш.
1
Это нормально для всех TTY, но показывать двойной процесс для каждого nohup!
Наби КАЗ
@ NabiK.AZ от man lsof: «Обычно потоки и задачи наследуют файлы вызывающего, но могут закрывать одни и открывать другие, поэтому lsof всегда сообщает обо всех открытых файлах потоков и задач». Я не смог найти информацию о nohup в его man, но похоже, что он использует два потока, а не один.
Ярослав Никитенко
6

Вы не можете точно получить список команд, с которых начался, nohupно вы можете увидеть их вместе с другими вашими процессами, используя команду ps x. Команды, начинающиеся с, nohupбудут отмечены вопросительным знаком в столбце TTY.

Старый Pro
источник
3
«ps x» не помогло, но я обнаружил, что «ps auxw» помогает.
Нильс Де Винтер
5

Вы также можете просто использовать команду top, и ваш идентификатор пользователя будет указывать на выполняемые задания и их время.

$ top

(это покажет все запущенные задания)

$ top -U [user ID]

(Это покажет задания, специфичные для идентификатора пользователя)

Jcrow06
источник
Кроме того, это хорошо то, что он остается на вашей консоли, чтобы вы могли наблюдать за работой и знать, когда она закончится
rgilligan