posix_spawn创建新的进程时,设置新的工作目录 除去posix_spawnattr_setcwd_np函数
时间: 2023-08-09 11:06:11 浏览: 116
除了使用 posix_spawnattr_setcwd_np()
函数设置新的工作目录,还可以使用 chdir()
函数改变当前进程的工作目录,然后使用 posix_spawn()
函数创建新的进程,由于新进程会继承当前进程的工作目录,所以新进程的工作目录也会被改变。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <spawn.h>
int main(void) {
pid_t pid;
posix_spawn_file_actions_t actions;
posix_spawn_file_actions_init(&actions);
char *argv[] = { "/bin/ls", NULL };
int status;
// 改变当前进程的工作目录
if (chdir("/home/myuser/mydir") == -1) {
perror("chdir");
exit(EXIT_FAILURE);
}
// 创建新的进程,新进程继承当前进程的工作目录
if (posix_spawn(&pid, argv[0], &actions, NULL, argv, environ) != 0) {
perror("posix_spawn");
exit(EXIT_FAILURE);
}
// 等待新进程结束
if (waitpid(pid, &status, 0) == -1) {
perror("waitpid");
exit(EXIT_FAILURE);
}
printf("Child process exited with status %d\n", status);
exit(EXIT_SUCCESS);
}
在上述示例代码中,我们首先使用 chdir()
函数改变当前进程的工作目录为 /home/myuser/mydir
,然后调用 posix_spawn()
函数创建新的进程,由于新进程会继承当前进程的工作目录,所以新进程的工作目录也会被设置为 /home/myuser/mydir
。最后我们使用 waitpid()
函数等待新进程结束,并打印出新进程的退出状态。
相关推荐


















