linux环境posix_spawn创建进程时更改工作目录 通用的方法
时间: 2023-08-09 10:04:55 浏览: 140
在使用 `posix_spawn` 创建进程时,可以使用 `posix_spawn_file_actions_addchdir_np` 函数来更改子进程的工作目录。
下面是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <spawn.h>
#include <fcntl.h>
#include <sys/wait.h>
int main() {
pid_t pid;
posix_spawn_file_actions_t actions;
posix_spawn_file_actions_init(&actions);
// 更改工作目录到 /tmp
posix_spawn_file_actions_addchdir_np(&actions, "/tmp");
char *argv[] = { "ls", "-l", NULL };
int status = posix_spawn(&pid, "/bin/ls", &actions, NULL, argv, NULL);
if (status != 0) {
perror("posix_spawn");
return EXIT_FAILURE;
}
printf("Child process %d started\n", pid);
if (waitpid(pid, &status, 0) == -1) {
perror("waitpid");
return EXIT_FAILURE;
}
printf("Child process finished with status %d\n", status);
return EXIT_SUCCESS;
}
```
在上面的例子中,我们使用 `posix_spawn_file_actions_addchdir_np` 函数将子进程的工作目录更改为 `/tmp`,然后再使用 `posix_spawn` 函数创建子进程并执行 `ls -l` 命令。当子进程执行完毕后,我们使用 `waitpid` 函数等待子进程退出并获取其退出状态。
阅读全文