Мне нужно устранить некоторые проблемы, связанные с переменными среды в системе Unix.
В Windows я могу использовать такой инструмент, как ProcessExplorer, для выбора конкретного процесса и просмотра значений каждой переменной среды.
Как я могу сделать то же самое в Unix? echoing
и env
cmd просто показывает значения в настоящее время, но я хочу посмотреть, какие значения использует текущий запущенный процесс.
Ответы:
Если вы хотите иметь pid (ы) данного исполняемого исполняемого файла, вы можете, среди ряда других возможностей, использовать
pidof
:РЕДАКТИРОВАТЬ :
Я полностью цитирую комментарии Денниса Уильямсона и Тедди, чтобы добиться более читабельного результата. Мое решение заключается в следующем:
источник
cat /proc/17330/environ | tr \\0 \\n
xargs --null --max-args=1 echo < /proc/PID/environ
/proc
файловая система не переносима.xargs
для преобразования нулей в новые строки лучше, чем использованиеtr
. Может кто-нибудь выложить это для меня? Благодарю.Поскольку в этом вопросе есть тег unix, а все остальные проделали такую большую работу по адресу тега linux , вы можете получить эту информацию в OS X и других системах, основанных на BSD, используя
или же
и на солярисе с
Solaris также поддерживает
/proc
каталог, если вы не хотите запоминать скрытуюps
команду.источник
ps -p <PID> -wwE
./proc/PID/environ
. Эти файлы доступны для чтения только владельцу процесса.Как уже упоминали другие, в Linux вы можете посмотреть в / proc, но есть, в зависимости от версии вашего ядра, одно или два ограничения:
Прежде всего, файл environment содержит среду, которая выглядела, когда процесс был запущен. Это означает, что любые изменения, которые процесс мог внести в свою среду, не будут видны в / proc:
Первая оболочка представляет собой оболочку входа в систему и изначально имеет очень ограниченную среду, но ее рост осуществляется путем поиска, например, .bashrc, но / proc не отражает это. Вторая оболочка с самого начала наследует более широкую среду, которую она показывает в / proc.
Кроме того, в старых ядрах содержимое файла окружения ограничено размером страницы (4 КБ):
Где-то между 2.6.9 (RHEL4) и 2.6.18 (RHEL5) этот предел был снят ...
источник
правильное использование параметров BSD для этого (по крайней мере, в Linux):
или же
и да, ps manpage довольно запутанный. ( через )
источник
ps eww $pid
исправления 2-й проблемы.xargs
илиtr
преобразования их в новые строки для удобства чтения. Вы, наверное, поняли это за прошедшие четыре года.замените PID на PID процесса, который вы хотите увидеть. Вся информация о запущенном процессе находится в каталоге / proc / PID /
пример: cat / proc / 32512 / environment
источник
Взято из Archlinux вики :
Вы можете создать временную функцию для разбора значений в
/proc/<pid>/environ
. По подсказке терминала:Затем с pid процесса, который вы хотите, просто используйте:
источник
Под Linux я бы попробовал взглянуть на
источник
Для Solaris 5.10 это работает:
источник
Хотя это довольно редко документировано, содержимое
/proc/<pid>/environ
будет содержать только среду, которая использовалась для запуска процесса.Если вам нужно проверить текущее состояние среды процесса, один из способов сделать это - использовать
gdb
.источник
И поскольку моя работа заставляет меня быть фанатом AIX, давайте не будем забывать:
Или, как называется в справочной странице, «Стандарты Беркли».
По какой-либо причине / proc / PID / environment не существует в AIX.
источник
Если вы хотите создать форматированный
env
вывод переменных окружения для произвольного процесса (PID), вы можете создать удобнуюpenv <pid>
команду bash (с учетом вашей ОС) и добавить ее в свой файл.bashrc
:Linux добавьте это в ваш ~ / .bashrc:
macOS / BSD добавьте это в ваш ~ / .bashrc:
Солярис добавьте это в ваш ~ / .bashrc:
Использование:
источник
Решение для Mac, возможно, другие BSD могут быть чем-то вроде
Переменные среды добавляются в командную строку, это удаляет командную строку, и у нас остаются только переменные среды.
Это не идеально, потому что они разделены пространством, а не разделены НЧ
источник
/ Proc / PID / Environ
Для этого сначала нам нужно идентифицировать PID процесса. для этого вы можете использовать команду PS
источник