環境変数が子プロセスに引き継がれるか実際に確認してみました
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> int main(void) { putenv("BEFORE_FORK=HELLO"); pid_t pid; pid = fork(); if (pid == -1) { perror(""); exit(EXIT_FAILURE); } if (pid != 0) { fprintf(stderr, "(parent:%d) getenv %s\n", getpid(), getenv("BEFORE_FORK")); fprintf(stderr, "(parent:%d) putenv %s\n", getpid(), "PARENT"); putenv("PARENT=HELLO_FROM_PARENT"); wait(NULL); exit(EXIT_SUCCESS); } else { sleep(10); fprintf(stderr, "(child:%d) getenv %s\n", getpid(), getenv("BEFORE_FORK")); fprintf(stderr, "(child:%d) getenv %s\n", getpid(), getenv("PARENT")); exit(EXIT_SUCCESS); } }
動作結果はこちら
$ ./fork_env (parent:4552) getenv HELLO (parent:4552) putenv PARENT (child:4553) getenv HELLO (child:4553) getenv (null)
結論として