Я хочу знать, в каком рабочем столе данный процесс работает. Я могу получить это от использования окна ID wmctrl
. Я могу также узнать, в каком процессе эмулятора терминала данный процесс работает путем трассировки родительского происхождения до терминального процесса.
Однако данный терминальный процесс будет иметь несколько распространений окон через несколько рабочих столов.
Я использую эмулятор терминала roxterm
в эти дни, хотя и Konsole и терминал гнома подобны ему в этом отношении.
Существует ли способ запросить один или несколько из этих приложений для обнаружения, в каком из их окон работает данный процесс? Если это требует gdb
хакерство, ну, в общем, взламывает далеко. Хотя что-то, вероятно, чтобы продолжить работать после обновления, вероятно, было бы лучше :)
Я не совсем настроен против отслеживания этого материала при инициализации удара, но я, ненавидят для разбираний во всех окровавленных деталях, и кажется вероятным, что существуют некоторые значительные пограничные случаи, которые не будут работать с таким подходом. Хотя, возможно, кто-то уже понял это?
С другой стороны, если существует другой эмулятор терминала, который обеспечивает более богатый интерфейс для доступа к таким самосозерцательным данным, которые были бы хороши для знания.
Я мог обойти это путем выполнения каждого окна в отдельном процессе, но компромиссы и с точки зрения использования памяти и с точки зрения универсальности (например, перемещение вкладки от одного окна до другого), вероятно, недопустимы. Главным образом это - использование памяти.
Много эмуляторов терминала (включая rxvt, xterm, терминал гнома и консоль; я не протестировал с roxterm), устанавливает переменную среды WINDOWID
к идентификатору окна подпроцесс (например, оболочка) был запущен в. Таким образом на Linux,
</proc/$pid/environ tr \\0 \\n | sed -n 's/^WINDOWID=//p'
говорит Вам который окно $pid
работает в.
Это не будет работать, если процесс мигрировал между окнами, например, если он работает под экраном или если Вы переместили вкладки между окнами.