В зависимости от то, что "полностью используют все мои программы", означает, опции:
Используйте стандартные полномочия файла Unix защитить Ваши файлы. Преимущество здесь состоит в том, что действительно легко настроить, поскольку это - просто вопрос решения, какие файлы Вы хотите защищенный и установка соответствующих полномочий на них. Оборотная сторона - то, что Ваш друг не сможет сделать все в системе, поскольку у них не будет корневого доступа
Выполните тюрьму FreeBSD. FreeBSD имеет тюрьмы, которые разработаны для точно этой цели. Они прилагают немного усилий для установки, но Вы даете Вашему другу полную файловую систему, которую они могут использовать, как они желают: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails.html
Выполните истинную Виртуальную машину. Xen или Virtualbox могут быть выполнены, чтобы дать полностью операционный сервер Вашему другу. Это может быть довольно ресурсоемким с точки зрения памяти, ЦП и диска, но это является самым отдельным из Ваших файлов.
Вывод приложения, запущенного из менеджера окон, переходит к тому же месту как вывод из самого менеджера окон. (Если приложение не перенаправляет его, но типичные приложения 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
.
Менеджер окон является ребенком 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
) если у Вас есть правильные полномочия суперпользователя.
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
затем в том процессе дескрипторами файлов по умолчанию остаются открытыми.
Таким образом, ответ - то, что обычно вывод / ошибка идет, где вывод процесса родителя / ошибка указывала во время ветвления (если родительская программа не делает некоторые перенаправления, конечно). Я думаю, что Вы не можете требовать ничего более определенного, если мы не знаем название родительской программы точно. Процесс менеджера окон редко вовлекается в запуск других программ непосредственно.
Например, в моем случае
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
pidof blackbox
илиpgrep blackbox
получить PID менеджера окон, или непосредственноlsof -p$(pidof blackbox)
. Ttys не имеют никакого отношения к этому. А-ч – Gilles 'SO- stop being evil' 15.08.2013, 18:00ls -l /proc/<blackbox-id>/fd
говорит мне, что stdout переходит в/dev/null
и stderr переходит в~/.xsession-errors
. – August Karlstrom 15.08.2013, 18:07