linux posix_spawn创建进程时设置环境变量
时间: 2023-07-31 09:10:58 浏览: 107
posixspawn:shell中posix_spawn的功能
5星 · 资源好评率100%
在使用 `posix_spawn` 函数创建进程时,可以通过设置 `posix_spawn_file_actions_t` 对象来设置环境变量。
具体步骤如下:
1. 创建 `posix_spawn_file_actions_t` 对象并初始化。
```c
posix_spawn_file_actions_t file_actions;
posix_spawn_file_actions_init(&file_actions);
```
2. 使用 `posix_spawn_file_actions_addattr` 函数设置环境变量。
```c
char* envp[] = {"ENV_VAR=value", NULL}; // 环境变量数组
posix_spawn_file_actions_addattr(&file_actions, POSIX_SPAWN_USEVFORK, NULL, 0); // 设置 vfork 标志
posix_spawn_file_actions_addattr(&file_actions, POSIX_SPAWN_SETENV, envp, 0); // 设置环境变量
```
3. 调用 `posix_spawn` 函数创建进程。
```c
pid_t pid;
const char* path = "/bin/bash"; // 可执行文件路径
char* argv[] = {path, NULL}; // 命令行参数数组
posix_spawn(&pid, path, &file_actions, NULL, argv, envp);
```
完整示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <spawn.h>
int main(int argc, char* argv[]) {
pid_t pid;
posix_spawn_file_actions_t file_actions;
char* envp[] = {"ENV_VAR=value", NULL};
posix_spawn_file_actions_init(&file_actions);
posix_spawn_file_actions_addattr(&file_actions, POSIX_SPAWN_USEVFORK, NULL, 0);
posix_spawn_file_actions_addattr(&file_actions, POSIX_SPAWN_SETENV, envp, 0);
const char* path = "/bin/bash";
char* args[] = {path, NULL};
if (posix_spawn(&pid, path, &file_actions, NULL, args, envp) != 0) {
perror("posix_spawn");
return EXIT_FAILURE;
}
waitpid(pid, NULL, 0); // 等待子进程结束
posix_spawn_file_actions_destroy(&file_actions);
return EXIT_SUCCESS;
}
```
阅读全文