Страница 1 из 1

Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 10:35:12
coyot.rush
Собственно говоря как получить PID приложения(процесса) по хэндлу окно (чужого) используя средства X window ?
PS:
Можно тоже самое средствами MSE ?
Очень хочеться написать аналог PC Bost для Linux (Увелечение приоритета приложения с которым работает пользователь)

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 12:49:57
v-t-l
Можно порыться в исходниках утилиты xkill, но
wikipedia.org писал(а):Unlike kill, xkill does not request that the client process, which may be running on a different machine, be terminated. In fact, the process can continue running without an X connection. Most clients, however, do abort when their X connections are unexpectedly closed.
http://en.wikipedia.org/wiki/Xkill

Добавлено спустя 7 минут 27 секунд:
в общем, процесс соединяется с X-сервером по специальному протоколу, т.е., грубо говоря, прога может работать на одном компе, а рисовать свои окна на другом.

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 13:16:04
coyot.rush
Пробовал :(
..........
xlib.pp
..........
function XKillClient(para1:PDisplay; para2:TXID):cint;cdecl;external libX11;
.........
Пример http://kylixportal.narod.ru/articles/xwnd.htm
Эта функция убивает приложение по хэндлу окна. Мне немного другое нужно :)
Исходники нужны, но не XKill, а krunner (KDE) , он показывает соответствие названию окна и PID'а процесса.
В goole не посылать , был, искал с промощью поиска открытока кода. Нашел. Искал в них по ключевым словам window list. И тоже нашел TODO :wink: Типа на будующее. Правда версия 3.9 а сейчас 4.х

PS
Хорошо одно, точто х сервер однозначно определяет соответствие хэндля окна и пида приложения
Если у кого есть свежие сырцы krunner кинте на мыло яндекса для coyot.rush

Добавлено спустя 7 минут 11 секунд:
в общем, процесс соединяется с X-сервером по специальному протоколу, т.е., грубо говоря, прога может работать на одном компе, а рисовать свои окна на другом.

Знаю. Но клиент и сервер на одном компе.

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 13:55:53
Sergei I. Gorelkin
1) См. исходники утилиты xlsclients.
2) PID процесса находится в свойстве окна _NET_WM_PID, откуда его можно спокойно прочитать с помощью XGetWindowProperty. А имя машины, откуда пришел клиент, лежит в свойстве WM_CLIENT_MACHINE. Но записываются эти свойства клиентом, поэтому соответствие их реальности находится на его совести.
3) Чтобы в Линуксе повышать приоритет, нужны рутовые полномочия.

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 15:47:52
coyot.rush
3) Чтобы в Линуксе повышать приоритет, нужны рутовые полномочия.

1)Наверное сделаю в виде демона стартуешем при запуске системы, что бы каждый раз пароль не пришлось вводить
2) Или понизить приоритеты всех приложений пользователя кроме систмных (root'x)
2) PID процесса находится в свойстве окна _NET_WM_PID, откуда его можно спокойно прочитать с помощью XGetWindowProperty. А имя машины, откуда пришел клиент, лежит в свойстве WM_CLIENT_MACHINE. Но записываются эти свойства клиентом, поэтому соответствие их реальности находится на его совести.

Спасибо что направили в нужное русло.
Вот нашел
http://www.rsdn.ru/forum/unix/2553619.all.aspx
Если какая-сь тулза, которая умеет показывать, какой процесс отвечает за определенное окно?
Код: Выделить всё
$xprop | grep _NET_WM_PID | cut -f 2 -d "=" | xargs ps

1) См. исходники утилиты xlsclients

Пошел искать исходники xlsclients,xprop,xargs :D

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 16:03:41
Sergei I. Gorelkin
xargs немного не оттуда (она не относится к иксам). Она просто читает стандартный ввод и передает его своему аргументу как параметр командной строки.

Чтение свойств (функциональность xprop) в MSE есть, но только в платформенно-зависимой части (i386-linux/mseguiintf.pas) и наружу не торчит.

Re: Получение PID'a по хэндлу окна (Linux+X window)

СообщениеДобавлено: 24.09.2009 16:21:29
coyot.rush
xargs немного не оттуда (она не относится к иксам). Она просто читает стандартный ввод и передает его своему аргументу как параметр командной строки.

Круг сужаеться
Чтение свойств (функциональность xprop) в MSE есть, но только в платформенно-зависимой части (i386-linux/mseguiintf.pas) и наружу не торчит.

И не надо. У меня под вынь гдето на винте в недоработанном варианте валяеться :)
А за точто подсказали где можно подчерпныть инфу не читая мсходники на С спасибо.