写一个下面的代码来验证
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main() {
// 设置环境变量 MY_VAR 的值为 "hello_world"
if (setenv("MY_VAR", "hello_world", 1) != 0) {
perror("setenv");
return 1;
}
pid_t pid;
// 使用 fork() 创建一个新进程
pid = fork();
if (pid < 0) {
// 错误处理:fork() 返回负值表示创建子进程失败
fprintf(stderr, "Fork failed\n");
return 1;
} else if (pid == 0) {
// 在子进程中执行的代码
printf("Child process: Hello, I am the child process! PID: %d\n", getpid());
// 获取并打印设置的环境变量 MY_VAR 的值
char *value = getenv("MY_VAR");
if (value != NULL) {
printf("in child, MY_VAR is set to: %s\n", value);
} else {
printf("MY_VAR is not set.\n");
}
pid_t pid;
// 使用 fork() 创建一个新进程
pid = fork();
if (pid == 0) {
char *value = getenv("MY_VAR");
if (value != NULL) {
printf("in grandchild, MY_VAR is set to: %s\n", value);
} else {
printf("MY_VAR is not set.\n");
}
}
} else {
// 在父进程中执行的代码
printf("Parent process: Hello, I am the parent process! PID: %d\n", getpid());
printf("Parent process: Child's PID: %d\n", pid);
}
// 父子进程都会执行的代码
printf("Hello from process PID: %d\n", getpid());
return 0;
}
编译并执行后,执行结果如下:
Parent process: Hello, I am the parent process! PID: 923571
Parent process: Child's PID: 923572
Hello from process PID: 923571
Child process: Hello, I am the child process! PID: 923572
in child, MY_VAR is set to: hello_world
Hello from process PID: 923572
in grandchild, MY_VAR is set to: hello_world
Hello from process PID: 923573
可以看到环境变量 MY_VAR 被传递给了儿子和孙子
此时我们在 terminal echo $MY_VAR 试试
可以看到 MY_VAR 为空。也就是说,setenv 所设置的变量的 Lifecycle 仅限于程序还活着的时候