linux环境posix_spawn创建进程时更改工作目录
时间: 2023-07-26 18:06:22 浏览: 61
可以使用 `posix_spawnattr_t` 结构体中的 `posix_spawnattr_setcwd` 函数设置创建进程时的工作目录。具体步骤如下:
1. 创建 `posix_spawnattr_t` 结构体并初始化。
```c
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
```
2. 设置工作目录。
```c
const char* cwd = "/path/to/desired/directory";
posix_spawnattr_setcwd(&attr, cwd);
```
3. 使用 `posix_spawn` 函数创建进程。
```c
pid_t pid;
const char* path = "/path/to/executable";
char* const argv[] = {path, NULL};
int ret = posix_spawn(&pid, path, NULL, &attr, argv, NULL);
if (ret != 0) {
// 处理错误
}
```
在这个例子中,创建了一个新的进程,该进程的工作目录为 `/path/to/desired/directory`。请注意,`posix_spawn` 函数的第三个参数和第六个参数都设置为 `NULL`,这表示继承父进程的环境变量和信号处理程序。
完整的示例代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <spawn.h>
#include <unistd.h>
int main() {
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
const char* cwd = "/path/to/desired/directory";
posix_spawnattr_setcwd(&attr, cwd);
pid_t pid;
const char* path = "/bin/pwd";
char* const argv[] = {path, NULL};
int ret = posix_spawn(&pid, path, NULL, &attr, argv, NULL);
if (ret != 0) {
perror("posix_spawn");
exit(EXIT_FAILURE);
}
printf("Child process PID is %d\n", pid);
return 0;
}
```
阅读全文