Текущие переменные окружения процесса

Debian 6.0 является (в настоящее время стабильное) Сжатие; Lenny был 5.0 (в настоящее время oldstable). Я предположу, что Вы имели в виду, Сжимают.

Используйте способное прикрепление для безопасного добавления Хрипящий (в настоящее время тестирующий) к Вашему sources.list, затем установка gcc-4.7/wheezy.

Другими словами, Ваш /etc/apt/sources.list должен выглядеть примерно так:

deb local.debian.mirror squeeze main
deb local.debian.mirror wheezy main

в то время как Ваш /etc/apt/preferences должен выглядеть примерно так:

Package: *
Pin: release n=squeeze
Pin-Priority: 900

Package: *
Pin: release n=wheezy
Pin-Priority: 200

(Точные числа не имеют значения слишком много; посмотрите человека 5 apt_preferences для получения дополнительной информации о том, что означают различные диапазоны.)

Это будет препятствовать тому, чтобы пакеты тестирования были неумышленно установлены. (Конечно, Вы могли просто обновить свою целую систему до тестирования.)

Можно получить некоторые ошибки разрешения с apt-get install gcc-4.7/testing поскольку это будет иметь зависимости, которые требуют версий, больше, чем стабильный; apt-get --target-release testing install gcc-4.7 установит тестирование на приоритет 990 на время команды.

3
13.04.2017, 15:36
2 ответа

Среда является списком строк, проведенных execve системный вызов, точно так же, как список аргументов. Период. То, что приложения делают с тем списком строк, которые он получает, до приложения.

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

У них есть библиотечные функции C для помощи им делающий это: среда сделана доступной как a environ переменная, и можно получить и изменить тот список (копия списка переменных среды, которые это получило) с getenv, setenv, putenv, и функции как execvp, execl, system, popen... используйте это environ переменная при выполнении команд (вызов execve с environ они отслеживают).

Теперь приложения не должны использовать тот API. Они могут использовать свой собственный способ управлять списком переменных среды. Оболочки, например, переменные среды карты для окружения переменных и вероятны не использовать putenv/setenv libc функции. perl имеет %ENV ассоциативный массив и так далее.

Можно всегда использовать gdb присоединить к процессу и заставить его звонить system("env > /tmp/some-file") (принятие, они динамично связаны с libc), но у Вас нет гарантии это env получит ту же среду, чем другая команда добралась бы, если бы команда, к которой Вы присоединяете, выполнялась, она ее собственным способом (думайте об оболочках, например). (также отметьте это system() запускает оболочку (для интерпретации командной строки), и оболочки могут изменить свою среду на запуске (попытка, например, env -i sh -c env).

$ sleep 100 &
[1] 17098
$ gdb --pid=$! /bin/sleep
[...]
(gdb) p environ[0]
$1 = 0x7fffd722d227 "STY=7498.pts-0.hostname"
(gdb) p environ[1]
$2 = 0x7fffd722d245 "TERM=screen-bce"
(gdb) call system("env > /tmp/some-file")
$4 = 0
(gdb) detach
Detaching from program: /bin/sleep, process 17098
(gdb) quit
$ cat /tmp/some-file
GNOME_KEYRING_PID=6850
SSH_AGENT_PID=6844
SHLVL=1
[...]
4
27.01.2020, 21:20

Если Вы запускаете Linux или одного из Unixe, который имеет a /proc файловая система, среда процесса находится в одном из файлов для каждого процесса под /proc. У меня нет доступа к машине Соляриса прямо сейчас, но для Linux это работало:

$ tr  '\0' '\n' < /proc/$$/environ

Это печатает переменные среды текущей оболочки, но $$ может быть любой идентификатор процесса, к которому Ваш идентификатор пользователя имеет доступ.

Был способ сделать это в соответствии с Солярисом, но это было намного более сложно. Я думаю, что BSDs имеют a /proc более подобный Linux.

0
27.01.2020, 21:20
  • 1
    На Солярисе это: pargs -e $$ | cut -d' ' -f2- –  maxschlepzig 17.07.2013, 09:18
  • 2
    Перечитайте вопрос - /proc/.../environ только включает начальную среду, OP просит текущую среду... Как примечание стороны - на Солярисе, pargsucb/ps) на самом деле поиск текущая среда в адресном пространстве (/proc/.../as) из процесса. –  maxschlepzig 17.09.2013, 12:58

Теги

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