libuv:fork 和 uv_spawn 的区别?
Posted
技术标签:
【中文标题】libuv:fork 和 uv_spawn 的区别?【英文标题】:libuv: difference between fork and uv_spawn? 【发布时间】:2021-12-30 00:09:01 【问题描述】:最近我一直在玩 Libuv。就子进程而言,我没有得到编程模型。 例如看下面的代码:
uv_loop_t *loop;
uv_process_t child_req;
uv_process_options_t options;
void on_exit(uv_process_t* proc, long int io, int hj)
std::cout<<"on exit call back"<<std::endl;
int main()
loop = uv_default_loop();
char* args[3];
args[0] = "mkdir";
args[1] = "test-dir";
args[2] = NULL;
options.exit_cb = on_exit;
options.file = "mkdir";
options.args = args;
int r;
r = uv_spawn(loop, &child_req, &options);
std::cout<<r<<std::endl;
if (r)
std::cout<<"from line 231"<<std::endl;
fprintf(stderr, "%s\n", uv_strerror(r));
return 1;
else
fprintf(stderr, "Launched process with ID %d\n", child_req.pid);
return uv_run(loop, UV_RUN_DEFAULT);
这里打印在控制台上的输出是:
0
Launched process with ID 511168
on exit call back
据我了解,uv_spawn 的行为类似于 fork()
。在子进程中,r 的值为0
,在父进程中为非零。所以from line 231
也应该被打印出来。但显然不是。我从头到尾阅读了documentation,但我不知道。
任何帮助将不胜感激。
【问题讨论】:
n my understanding uv_spawn acts like fork(). In child process the value of r is 0
那么mkdir
发生了什么? mkdir
是子进程,而不是你的程序。孩子执行mkdir
代码,而不是你的。
谢谢@KamilCuk。它使事情变得清晰。
【参考方案1】:
n 我的理解 uv_spawn 的行为类似于 fork()
然后就像execve
和孩子变成mkdir
。所以子进程执行mkdir
,只有父进程返回你的代码。
【讨论】:
以上是关于libuv:fork 和 uv_spawn 的区别?的主要内容,如果未能解决你的问题,请参考以下文章