Переменные среды рабочего процесса на Unix?

При использовании подсистем балансировки нагрузки где-нибудь в сайте необходимо смочь настроить их, чтобы иметь DNS как виртуальный сервис.

Мои 1500-е Kemp Loadmaster могут быть установкой, чтобы сделать циклический алгоритм с обработкой отказа. Это использовало бы их сервисную проверку, чтобы удостовериться, что каждый сервер DNS является каждыми несколькими секундами, и разделите трафик между этими двумя серверами. Если Вы умираете, это выпадает из пула RR и только, сервер запрашивается.

Необходимо было бы просто указать resolv.conf на VIP на loadbalancer.

232
задан 22 February 2016 в 22:22
13 ответов
cat /proc/<pid>/environ

Если Вы хотите иметь pid данного рабочего исполняемого файла, среди многих других возможностей, можно использовать pidof:

AlberT$ pidof sshd   
30690 6512 

Править:

Я полностью заключаю комментарии Dennis Williamson и Teddy в кавычки для достижения более читаемого вывода. Мое решение следующее:

tr '\0' '\n' < /proc/<pid>/environ
298
ответ дан 28 November 2019 в 19:13
  • 1
    Для создания этого читаемым преобразуйте пустые указатели в новые строки: cat /proc/17330/environ | tr \\0 \\n –  Paused until further notice. 17 September 2009 в 22:14
  • 2
    Я всегда делаю xargs --null --max-args=1 echo < /proc/PID/environ –  Teddy 29 October 2009 в 15:08
cat /proc/PID/environ

замените PID PID процесса, который Вы хотите видеть. Каждая информация о рабочем процессе находится под/proc/PID/каталогом

пример: кошка/proc/32512/environ

7
ответ дан 28 November 2019 в 19:13

Так как этот вопрос имеет тег Unix, и все остальные сделали такую отличную работу, обратившись к тегу Linux, можно получить эту информацию о OS X и другом BSD-полученном системном использовании

ps -p <PID> -wwwe

или

ps -p <PID> -wwwE

и на Солярисе с

/usr/ucb/ps -wwwe <PID>

Солярис также поддерживает /proc каталог, если Вы не хотите помнить неясное ps команда.

62
ответ дан 28 November 2019 в 19:13
  • 1
    Я я работаю пикосекунда-p < PID>-wwwe на OS X 10.6 я получаю список всех рабочих процессов. правильная команда с флаг-E, не-e. –  drAlberT 18 September 2009 в 11:17
  • 2
    Я протестировал на OS X 10.4, но не 10.5. Обновленный соответственно. –  Gerald Combs 18 September 2009 в 18:23

В соответствии с Linux, я попытался бы взглянуть на

/proc/<pid>/environ
6
ответ дан 28 November 2019 в 19:13

Как другие упомянули на Linux, можно посмотреть в/proc, но существует, в зависимости от версии ядра, одного или двух пределов:

В первую очередь, окружать файл содержит среду, поскольку это смотрело, когда процесс был порожден. Это означает, что любые изменения, которые процесс, возможно, внес в свою среду, не будут видимы в/proc:

$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$ 

Первая оболочка является оболочкой входа в систему и первоначально имеет очень ограниченную среду, но выращивает ее путем определения источника, например, .bashrc, но/proc не отражает это. Вторая оболочка наследовала большую среду от запуска, который это, почему это показывает в/proc.

Кроме того, на более старых ядрах содержание окружать файла ограничено размером страницы (4K):

$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$ 

Где-нибудь между 2.6.9 (RHEL4) и 2.6.18 (RHEL5) этот предел был удален...

25
ответ дан 28 November 2019 в 19:13

И так как мое задание заставляет меня быть мальчиком вентилятора AIX, позволить нам не забыть:

ps eww [pid]

Или поскольку страница справочника называет его, "Стандарты Беркли".

По любой причине/proc/PID/environ не существует в AIX.

3
ответ дан 28 November 2019 в 19:13

корректное использование опций BSD сделать это (по крайней мере, на Linux):

ps e $pid

или

ps auxe  #for all processes

и да, страница справочника PS довольно сбивает с толку. (через)

11
ответ дан 28 November 2019 в 19:13

Для Соляриса 5.10, это работает:

pargs -e <PID>
5
ответ дан 28 November 2019 в 19:13

Взято из вики Archlinux :

Вы можете создать временную функцию для анализа значений в / proc / / environment . В командной строке терминала:

envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }

Затем с pid процесса, который вы хотите, просто используйте:

envof <pid>
7
ответ дан 28 November 2019 в 19:13

Решение для Mac, возможно, и другие BSD тоже могут быть чем-то вроде

pid=28369; ps e $pid | cut -c$(expr 1 + $(ps p $pid|tail +2|wc -c))-

Переменные среды добавляются в командную строку, это удаляет командную строку, и у нас остаются только переменные среды.

Это не идеально потому что они разделены пробелами, а не разделены LF

0
ответ дан 28 November 2019 в 19:13

Содержимое / proc / / environment , хотя и довольно скудно документировано. будет содержать только среду, которая использовалась для запуска процесса.

Если вам нужно проверить текущее состояние среды процесса, один из способов сделать это - использовать gdb .

# Start gdb by attaching it to a pid or core file
gdb <executable-file> <pid or core file>

# Run the following script to dump the environment
set variable $foo = (char **) environ
set $i = 0
while ($foo[$i] != 0)
print $foo[$i++]
end
5
ответ дан 28 November 2019 в 19:13

/ proc / PID / Environment

для этого сначала нам нужно определить PID процесса. для этого вы можете использовать команду ps

-1
ответ дан 28 November 2019 в 19:13

Если вы хотите создать форматированный env вывод переменных среды для произвольного процесса (PID) , вы можете создать удобную команду bash penv (адаптированную для вашей ОС) и добавить ее в свой .bashrc :

Linux добавить это в свой ~ /.bashrc:

penv () { 
    xargs --null --max-args=1 < /proc/$1/environ
}

macOS / BSD добавьте это в свой ~ / .bashrc:

penv() {
   ps eww -o command $1  | tr ' ' '\n'
}

Solaris добавьте это в свой ~ / .bashrc:

penv() {
   pargs -e $1
}

Использование:

$ source $HOME/.bashrc
$ pgrep VBoxSVC
10268
$ penv 10268
SSH_CONNECTION=1.1.1.242 53960 1.1.1.91 22
GREP_COLORS=sl=49;39:cx=49;39:mt=49;38;5;167;1:fn=49;39;1:ln=49;39:bn=49;39:se=50;39
LANG=en_US.UTF-8
EDITOR=vim
XDG_SESSION_ID=106
USER=root
PWD=/root
HOME=/root
SSH_CLIENT=1.1.1.242 53960 22
SSH_TTY=/dev/pts/3
MAIL=/var/mail/root
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/root/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:.
VBOX_LOG_FLAGS=thread tsc
VBOX_LOG=-all+dev_vmm_backdoor.e.l.f+dev_vmm.e.l.f
2
ответ дан 28 November 2019 в 19:13

Теги

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