linux环境posix_spawn创建进程时如何更改工作目录
时间: 2023-07-26 12:06:21 浏览: 118
在 Linux 环境中,可以使用 posix_spawn
函数创建一个新进程。要更改新进程的工作目录,可以在 posix_spawnattr_t
结构体中设置 POSIX_SPAWN_SETSIGMASK
标志位,并将 chdir
函数调用添加到子进程的执行路径中。
下面是一个示例代码,展示了如何使用 posix_spawn
创建一个新进程并更改其工作目录:
#include <spawn.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
posix_spawn_file_actions_t actions;
posix_spawn_file_actions_init(&actions);
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETSIGMASK);
char *args[] = { "/bin/ls", "-l", NULL };
pid_t pid;
int status = posix_spawn(&pid, "/bin/ls", &actions, &attr, args, NULL);
if (status < 0) {
perror("posix_spawn");
return 1;
}
// Change the new process's working directory
chdir("/path/to/new/dir");
// Wait for the child process to complete
waitpid(pid, &status, 0);
return 0;
}
在上面的示例代码中,我们首先初始化了 posix_spawn_file_actions_t
和 posix_spawnattr_t
结构体。然后,我们使用 posix_spawn
函数创建一个新进程,将其命令行参数设置为 /bin/ls -l
。接着,我们使用 chdir
函数将新进程的工作目录更改为 /path/to/new/dir
。最后,我们使用 waitpid
函数等待子进程完成并获取其退出状态。
需要注意的是,在使用 posix_spawn
函数创建新进程时,我们必须初始化 posix_spawn_file_actions_t
和 posix_spawnattr_t
结构体,并将其传递给 posix_spawn
函数。如果不需要进行其他操作,可以将 actions
参数设置为 NULL
。同样地,如果不需要设置其他属性,可以将 attr
参数设置为 NULL
。
相关推荐

















