4

Как я могу перечислить процессы Linux (например, ps aux), но только те, которые имеют окна X11?

Я предполагаю, что между процессами и X-сервером должна быть какая-то простая связь (как всегда в linux). Это подвергается воздействию lsof ?

2 ответа2

4

xwininfo -tree -root | grep -v "не имеет имени" | grep -v child
Это немного другой подход, чем тот, который вы просили: вместо того, чтобы перечислять процессы, он перечисляет окна. Если вы ищете список идентификаторов процессов, это не решает задачу. Если вы ищете список того, что работает, это делает.

Очевидно, что этот подход не покажет вам название любой программы, в которой в качестве имени указано "child". Тем не менее, если вы ищете быстрый и простой вариант, который будет служить большинству целей, это может быть один.

Да, и, кстати, есть ряд других опций для xwininfo, например, возможность указать имя только одного окна (вместо указания корневого окна).

1

Я не совсем понимаю, что вы имеете ввиду. Скорее всего, команда, которую вы хотите использовать

    ps alx | grep pts

Вам понадобится long флаг ps для отображения одиннадцатого столбца, который идентифицирует терминал процесса, если таковой имеется.

Тем не менее, вы также можете увидеть ту же информацию в другом формате, с pstree который ...

pstree показывает запущенные процессы в виде дерева. Дерево имеет корень либо в pid, либо в init, если pid опущен.

При этом вы можете выполнить поиск Desktop Manager (в моем случае kdm), а затем увидеть из этого все процессы, происходящие из этого, включая те, которые вы начинаете как ssh-соединение. Если вы используете флаг -p , вам будут даны номера процессов,

      ├─konsole(2716)─┬─bash(2739)───ssh(8328)
                      │               └─{konsole}(2738)

что позволяет проверить, что номер процесса для процесса ssh такой же, как в выводе ps alx . Но это не показывает, AFAIK, tty, в котором была выполнена команда.

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