Можно смотреть на контрольную подсистему (и auditd). Существует однако некоторый код для записи, чтобы иметь включенную систему dbus, чтобы иметь всплывающее окно на рабочем столе. Можно смотреть на mandi программное обеспечение от mandriva (http://wiki.mandriva.com/en/Projects/Interactive_Firewall).
Переменные среды хранятся вместе с параметрами командной строки наверху расположения памяти процесса выше стека.
Переменные среды являются проявлением оболочки, которую Вы используете. Я предположил бы, что среда в целом является структурой данных, которая является частью компонент того, что составляет процесс.
Я не ожидал бы, что они будут держаться вместе в любом исключительном месте для всех процессов, скорее каждый процесс более вероятно сохраняет переменные среды вместе с данным процессом наряду с другой информацией связанными с данным процессом.
Можно отчасти видеть это, если Вы вводите по абсолютному адресу вокруг /proc
файловая система, которая поддерживает информацию о процессах, поскольку они работают на Вашем ядре.
Если мы ищем один из моего bash
процессы:
$ ps -eaf| grep bash | tail -1
saml 12095 3211 0 May10 pts/53 00:00:04 bash
Рассмотрение этого обрабатывает /proc
область (перечисляют первые 5):
$ sudo cat /proc/12095/environ | tr '\0' '\n' | head -5
rvm_log_path=/home/saml/.rvm/log
rvm_ruby_string=ruby-1.9.2-p180
TERM=xterm
SHLVL=1
KDEDIRS=/usr
Это показывает, по крайней мере, начальную среду что этот процесс, начатый с. Я верю /proc/PID/environ
не отражает, что активное представление этого обрабатывает среду, поскольку это добирается, увеличился.
Среда (пары имя/значение) живет к вершине стека. Рисунок 2 и Раздел 3 из состояния Запуска двоичного файла Linux/i386 ELF показывают о том, где среда. Тот документ несколько устарел как ELF, вспомогательный вектор также живет на стеке.
Можно проверить это с маленькой программой C:
#include <stdio.h>
int main(int argc, char **argv, char **env)
{
printf("argv holds %p\n", argv);
printf("argv[0] holds %p\n", argv[0]);
printf("env holds %p\n", env);
printf("env[0] holds %p\n", env[0]);
return 0;
}
Это не отвечает на другой подобный вопрос: когда Вы делаете export SOME_VAR
в оболочке, где это окружает, помещает новую переменную среды? Оболочка должна сохранить свою среду в структуре данных, которая может быть расширена по желанию, и затем (преобразованный в массив и) используемый в качестве envp
(3-й) аргумент в execve(2)
системные вызовы.