最近我一直在玩 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也應該列印出來。但顯然不是。我從頭到尾閱讀了檔案,但我不知道。任何幫助將不勝感激。
uj5u.com熱心網友回復:
n 我的理解 uv_spawn 就像 fork()
然后 likeexecve和 child 就變成了mkdir。因此 child 執行mkdir,并且只有 parent 回傳到您的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/361068.html
