linux环境posix_spawn创建进程时更改工作目录
时间: 2023-07-26 16:06:22 浏览: 119
可以使用 `posix_spawnattr_t` 结构体中的 `posix_spawnattr_setcwd_np()` 函数来更改新进程的工作目录。该函数的第一个参数是指向 `posix_spawnattr_t` 结构体的指针,第二个参数是要设置的新工作目录的路径。
以下是一个简单的示例代码,演示如何使用 `posix_spawn()` 和 `posix_spawnattr_setcwd_np()` 函数来创建一个新进程并将其工作目录更改为指定路径:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <spawn.h>
int main() {
posix_spawnattr_t attr;
pid_t pid;
char *argv[] = {"/bin/ls", "-l", NULL};
char *path = "/tmp";
posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETPGROUP);
// 设置工作目录
posix_spawnattr_setcwd_np(&attr, path);
if (posix_spawn(&pid, argv[0], NULL, &attr, argv, environ) == 0) {
printf("Child process started with PID %d\n", pid);
waitpid(pid, NULL, 0);
} else {
perror("posix_spawn");
}
posix_spawnattr_destroy(&attr);
return 0;
}
```
在上面的示例中,我们使用 `posix_spawnattr_setcwd_np()` 函数将工作目录设置为 `/tmp`,然后使用 `posix_spawn()` 函数创建新进程并执行 `/bin/ls -l` 命令。注意,我们还使用 `posix_spawnattr_setflags()` 函数将新进程与其父进程分离,以避免在父进程中等待子进程退出。
阅读全文