libuv8_process

本文介绍libuv提供的进程管理功能,包括子进程创建、父子进程分离、信号发送、I/O交互和管道通信等内容。

1. libuv-进程

1.1. 简介

  libuv提供子进程的管理工作,抽象平台的差异性,允许通过stream和pipe进行线程之间的交互

  unix建议每个进程只做一件事并且做好。所以一个进程常常使用多个子进程来完成各种任务,类似于shell中使用多个pipe。与线程共享内存类似,含有消息的多进程模型也很简单。

  基于事件的程序想利用现代计算机的多核功能是有一定挑战性的。在多线程程序里,内核可以通过调度把不同的线程分配到不同的系统核core上来提供core的利用率。但是libuv的loop只有一个线程,通过变通的使用多进程,每个进程上运行一个loop,每个进程关联到不同的core上以达到利用多核系统。

1.2. API

typedef enum {
  UV_IGNORE         = 0x00,
  UV_CREATE_PIPE    = 0x01,
  UV_INHERIT_FD     = 0x02,
  UV_INHERIT_STREAM = 0x04,

  UV_READABLE_PIPE  = 0x10,//只读 pipe, 前提是 UV_CREATE_PIPE 被设置
  UV_WRITABLE_PIPE  = 0x20,//只写 pipe, 前提是 UV_CREATE_PIPE 被设置

  UV_NONBLOCK_PIPE  = 0x40,//非阻塞 pipe, 前提是 UV_CREATE_PIPE 被设置
  UV_OVERLAPPED_PIPE = 0x40 /* old name, for compatibility */
} uv_stdio_flags;

typedef struct uv_stdio_container_s {
  uv_stdio_flags flags;

  union {
    uv_stream_t* stream;
    int fd;
  } data;
} uv_stdio_container_t;

enum uv_process_flags {
  UV_PROCESS_SETUID = (1 << 0),//手动设置 UID ,window无效
  UV_PROCESS_SETGID = (1 << 1),//手动设置 GID ,window无效

  UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS = (1 << 2),//参数不使用引号,并且没有任何转义,window专用
  
  UV_PROCESS_DETACHED = (1 <&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值