gnu screen: найти, в каком окне экрана запущен данный процесс или переменная?

gnu screen: найти, в каком окне экрана запущен данный процесс или переменная?

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

id=ABC123456; ~/run_long_process $id

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

решение1

Если это 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

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

Связанный контент