c : как добавить переменную среды только для текущего процесса?

#c #linux #system-calls

Вопрос:

В основном вопрос заключается в названии. Я использую setenv() функцию для установки переменной среды в своей программе cpp, где я также использую fork() exec() цепочку, которая создает дочерний процесс. Проблема в том, что созданная переменная также доступна из этого дочернего процесса. Это setenv() эквивалентно export ABC=EFG поведению в оболочке. Что я хочу, так это отделить эту функциональность. Я хочу отдельно установить переменную ABC=EFG и сделать ее доступной для дочернего процесса export ABC . Как это сделать?

РЕДАКТИРОВАТЬ: Я решил добавить свой комментарий к ответу @SergeyA здесь. Например, как bash обрабатывает переменные env в подобной ситуации? Если я напишу ABC=EFG и вызову скрипт, состоящий только из одной строки echo $ABC, он ничего не напечатает, если я ранее не вызвал export ABC. Я просто пишу оболочку и пытаюсь подражать этому поведению.

Комментарии:

1. @Фрэнк добавил: спасибо за замечание.

2. Существует различие между обычными переменными оболочки и переменными среды. Оболочки предоставляют последние только процессам, которые они выполняют, с помощью одной из exec*() функций, которая принимает аргумент среды.

Ответ №1:

Прямого способа сделать это нет. Вызов exec всегда приведет к тому, что дочерний процесс унаследует переменные среды родительского процесса.

Вы можете использовать exceve для явного указания переменных среды, которые должны быть видны дочернему процессу.

Комментарии:

1. Но как, например, bash обрабатывает переменные env в подобной ситуации? Если я напишу ABC=EFG и вызову скрипт, состоящий только из одной строки echo $ABC , он ничего не напечатает, если я предварительно не позвоню export ABC . Я просто пишу оболочку и пытаюсь подражать этому поведению

2. @sauce Я не видел его исходного кода, но я бы предположил, что он использует аналогичную технику.