1

Я хочу знать, на каком рабочем столе запущен данный процесс. Я могу получить это из окна ID с помощью wmctrl . Я также могу выяснить, в каком процессе эмулятора терминала выполняется данный процесс, проследив родительскую родословную до терминального процесса.

Однако данный процесс терминала будет иметь несколько окон, распределенных по нескольким рабочим столам.

В эти дни я использую эмулятор терминала roxterm , хотя и Konsole, и gnome-терминал похожи в этом отношении.

Есть ли способ запросить одно или несколько из этих приложений, чтобы узнать, в каком из их окон запущен данный процесс? Если это требует взлома gdb , хорошо, взломать. Хотя что-то, что, вероятно, продолжит работать после обновления, вероятно, будет лучше :)

Я не совсем против отслеживания этих вещей при инициализации bash, но мне не хочется разбираться со всеми мрачными деталями, и, похоже, есть некоторые существенные крайние случаи, которые не будут работать с таким подходом. Хотя, может быть, кто-то уже понял это?

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

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

1 ответ1

2

Многие эмуляторы терминала (включая rxvt, xterm, gnome-terminal и konsole; я не тестировал с roxterm) устанавливают переменную среды WINDOWID для идентификатора окна, в котором был запущен подпроцесс (например, оболочка). Так в Linux

</proc/$pid/environ tr \\0 \\n | sed -n 's/^WINDOWID=//p'

говорит вам, в каком окне работает $pid .

Это не будет работать, если процесс мигрировал между окнами, например, если он запущен под экраном или если вы мигрировали вкладки между окнами.

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