Откуда делает вывод из приложения, запущенного менеджера окон, идут?

В зависимости от то, что "полностью используют все мои программы", означает, опции:

  • Используйте стандартные полномочия файла Unix защитить Ваши файлы. Преимущество здесь состоит в том, что действительно легко настроить, поскольку это - просто вопрос решения, какие файлы Вы хотите защищенный и установка соответствующих полномочий на них. Оборотная сторона - то, что Ваш друг не сможет сделать все в системе, поскольку у них не будет корневого доступа

  • Выполните тюрьму FreeBSD. FreeBSD имеет тюрьмы, которые разработаны для точно этой цели. Они прилагают немного усилий для установки, но Вы даете Вашему другу полную файловую систему, которую они могут использовать, как они желают: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html

  • Выполните истинную Виртуальную машину. Xen или Virtualbox могут быть выполнены, чтобы дать полностью операционный сервер Вашему другу. Это может быть довольно ресурсоемким с точки зрения памяти, ЦП и диска, но это является самым отдельным из Ваших файлов.

10
15.08.2013, 00:25
3 ответа

Вывод приложения, запущенного из менеджера окон, переходит к тому же месту как вывод из самого менеджера окон. (Если приложение не перенаправляет его, но типичные приложения GUI не делают.)

Можно узнать, куда вывод WM идет путем взгляда на то, что он имеет открытый на дескрипторе файла 1 (стандартный вывод) и дескриптор файла 2 (стандартная погрешность); обычно оба перейдут к тому же файлу. Узнайте идентификатор процесса своего менеджера окон (попытка, например. pgrep metacity или pidof metacity если Метагород является Вашим менеджером окон — если Вы не знаете название процесса своего менеджера окон, смотрите на корень одного из деревьев процесса, о которых сообщают ps f или pstree). Предположим, идентификатор процесса Вашего менеджера окон является 1234, выполненным

lsof -p1234

и ищите строки, соответствующие дескрипторам файлов 1 и 2, или

или

ls -l /proc/1234/fd

Можно автоматизировать фильтрацию соответствующих дескрипторов файлов:

lsof -p1234 | awk '$4 ~ /^[12][^0-9]/'
ls -l /proc/1234/fd/[12]

(Примечание: все команды выше для Linux. pgrep распространено среди других нельдов, и lsof может быть установлен в значительной степени где угодно; ps опции и /proc содержание отличается через различные нельды.)

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

lsof -p$PPID
ls -l /proc/$PPID/fd

Много дистрибутивов направляют вывод X сессий к ~/.xsession-errors.

8
27.01.2020, 20:03
  • 1
    В моем случае дочерняя родительская иерархия, начинающая с WM, является черным ящиком <-lightdm <-lightdm <-init, и все ttys имеют значение"?". Я предполагаю затем, что вывод не идет никуда. –  August Karlstrom 15.08.2013, 17:59
  • 2
    @AugustKarlstrom Затем pidof blackbox или pgrep blackbox получить PID менеджера окон, или непосредственно lsof -p$(pidof blackbox). Ttys не имеют никакого отношения к этому. А-ч –  Gilles 'SO- stop being evil' 15.08.2013, 18:00
  • 3
    , конечно. Команда ls -l /proc/<blackbox-id>/fd говорит мне, что stdout переходит в /dev/null и stderr переходит в ~/.xsession-errors. –  August Karlstrom 15.08.2013, 18:07

Менеджер окон является ребенком X-сервера, таким образом, он и его детский вывод переходят к тому же месту как X-сервер.

Если Вы - единственный пользователь, и Вы входите в систему графически, некоторые системы перемещают экземпляр X-сервера от выходной консоли, означая, что можно переключить на это VT и видеть его. Анекдотическим образом расположение обычно - это alt-ctrl-f1 выходная консоль для X экземпляров и alt-ctrl-f7 эти X дисплеев, но можно проверить столько, сколько можно найти. Первые 6 обычно порождают логины, но существует потенциально больше, которые не делают и появятся пробел или с переданным по каналу выводом. Там мог бы быть произведен на некоторых из них от init, не путайте это с выводом от X. По моему опыту, X и дети всегда лают существенное количество предупреждений и сообщений (об отсутствующих шрифтах, обесцениваемых вызовах, и т.д.).

Если Вы не зарегистрируете на пути GUI, то это будет любой VT, с которого Вы запустили X, который является проблемой, так как Вы не будете видеть это, пока Вы не выйдете. Я верю с входом в систему GUI, XDM (графический вход в систему) выполнения как привилегированный процесс, подразумевая, что он может передать вывод по каналу к /dev/tty7. Вы можете также (startx 1>&2> /dev/tty7) если у Вас есть правильные полномочия суперпользователя.

1
27.01.2020, 20:03
  • 1
    В случае startx или xinit непосредственно можно всегда настраивать ~/.xinitrc сделать перенаправления по мере необходимости перед выполнением exec на желаемом менеджере окон. Самостоятельно я никогда не пропускал этот вид вывода. Если мне интересно, что производит приложение GUI, я выполняю его от терминала. Но на самом деле это могло бы быть полезно, таким образом, я перенаправил stdout и stderr ~/.xinitrc кому: ~/.xinitrc.out. –  Miroslav Koškár 14.08.2013, 18:35

При взятии этого обычно, одна программа запускает другого путем выполнения серии man 2 fork и man 2 execve затем в том процессе дескрипторами файлов по умолчанию остаются открытыми.

Таким образом, ответ - то, что обычно вывод / ошибка идет, где вывод процесса родителя / ошибка указывала во время ветвления (если родительская программа не делает некоторые перенаправления, конечно). Я думаю, что Вы не можете требовать ничего более определенного, если мы не знаем название родительской программы точно. Процесс менеджера окон редко вовлекается в запуск других программ непосредственно.

Например, в моем случае

  • нажатие Ctrl+P (обработанный xmonad менеджер окон), запустится dmenu_run
  • dmenu_run обработает мой вход и запустит некоторое приложение (например. xkill)

Вывод перейдет в /dev/tty1 потому что

  • xkill был запущен dmenu_run
  • dmenu_run был запущен xmonad
  • xmonad был запущен X
  • X был запущен startx
  • startx был запущен мной вручную от первой виртуальной консоли /dev/tty1

Только для ссылки, если Вы хотите найти, где произведено / ошибка идет, или лучше скажите, что является дескрипторами файлов, открытыми для конкретного процесса (с известным PID), сделать

$ lsof -p PID
0
27.01.2020, 20:03

Теги

Похожие вопросы