4

Я хотел бы выяснить, в каком из моих ~ 50 экранных окон GNU запущен процесс с определенной в нем определенной переменной. Например, около недели назад я сделал это:

id=ABC123456; ~/run_long_process $id

Это работает в одном из моих экранных окон ~ 50 GNU и производит много STDOUT/STDERR, но, кроме прокрутки назад каждого из окон или Ctrl+Z и возобновления каждого из окон, есть ли способ выяснить, какие один это? Какие-либо предложения?

1 ответ1

8

Если это Linux, вы можете следить за процессом примерно так. В качестве примера "длительного процесса" я собираюсь использовать «perl -e sleep», который просто спит вечно:

$ id=ABC123456; perl -e sleep $id

Теперь нам нужно найти запущенный процесс:

$ ps -Af | grep [A]BC123456
user  30579 22013  0 09:32 pts/10   00:00:00 perl -e sleep ABC123456
#           ^^^^^ parent PID

Теперь, когда у нас есть PID родителя, мы можем отслеживать его окружение, в котором screen устанавливает переменную WINDOW :

$ tr '\0' '\n' < /proc/22013/environ | grep WINDOW
WINDOW=3

Что правильно. Я запустил его в окне 3 окна. Поскольку это переменная окружения, есть большая вероятность, что ваша задача также унаследует ее (в зависимости от того, какой тип вызовов exec() используется), так что вы, вероятно, также можете отслеживать среду своей задачи и найти тот же результат. ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .