Windows 平台用spawn 创建进程时,把_P_WAIT改为_P_NOWAIT,输出有什么区别? 为什么?
时间: 2024-06-05 20:06:37 浏览: 5
将_P_WAIT改为_P_NOWAIT后,创建的进程将变成非阻塞模式,父进程不会等待子进程的结束,而是继续往下执行,子进程将在后台运行。因此,输出的区别是在_P_NOWAIT模式下,父进程不会在子进程结束前等待,因此不会阻塞,可以继续往下执行,而在_P_WAIT模式下,父进程会等待子进程结束后再继续执行,导致阻塞。
相关问题
posix_spawn创建进程时修改工作目录
可以使用 `posix_spawnattr_t` 结构体来设置新进程的工作目录。具体来说,可以使用 `posix_spawnattr_setcwd_np()` 函数来设置新进程的工作目录。这个函数需要两个参数:第一个参数是 `posix_spawnattr_t` 结构体的指针,第二个参数是新进程的工作目录路径。
以下是一个使用 `posix_spawnattr_setcwd_np()` 函数修改新进程工作目录的示例代码:
```c
#include <spawn.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char **argv)
{
posix_spawn_file_actions_t file_actions;
posix_spawnattr_t attr;
pid_t pid;
int status;
// 初始化文件操作和进程属性
posix_spawn_file_actions_init(&file_actions);
posix_spawnattr_init(&attr);
// 设置新进程的工作目录
posix_spawnattr_setcwd_np(&attr, "/new_working_directory");
// 创建新进程
char *const args[] = {"ls", NULL};
posix_spawn(&pid, "/bin/ls", &file_actions, &attr, args, environ);
// 等待新进程结束
waitpid(pid, &status, 0);
// 清理资源
posix_spawn_file_actions_destroy(&file_actions);
posix_spawnattr_destroy(&attr);
return 0;
}
```
注意,`posix_spawnattr_setcwd_np()` 函数需要在调用 `posix_spawn()` 函数之前进行调用,以确保新进程在创建时使用正确的工作目录。
posix_spawn创建的进程工作目录为什么跟父进程一样
在使用 `posix_spawn` 函数创建一个新进程时,可以指定一个属性对象 `posix_spawnattr_t` 来控制新进程的一些属性,其中包括工作目录。如果不指定工作目录,那么新进程的工作目录就会继承自父进程。
这种继承的行为是符合 Unix 系统的惯例的。在 Unix 系统中,进程是由现有进程派生而来的,通常需要继承一些属性,例如环境变量、文件描述符等等。工作目录也是这些属性之一,因为在执行某些操作时,需要相对于某个目录来进行。
因此,如果想要让新进程的工作目录与父进程不同,需要在创建进程时显式地指定工作目录属性。可以通过 `posix_spawnattr_setcwd_np` 函数来设置工作目录属性。例如,下面的代码可以创建一个在 `/tmp` 目录下工作的新进程:
```
posix_spawnattr_t attr;
posix_spawnattr_init(&attr);
posix_spawnattr_setcwd_np(&attr, "/tmp");
pid_t pid;
char *argv[] = { "/bin/ls", "-l", NULL };
posix_spawn(&pid, "/bin/ls", NULL, &attr, argv, NULL);
posix_spawnattr_destroy(&attr);
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)