Node.js进程管理之子进程实例分析


这篇“Node.js进程管理之子进程实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js进程管理之子进程实例分析”文章吧。Node.js是单线程的,对于现在普遍是多处理器的机器是一种浪费,怎么能利用起来呢?于是child_process模块出现了。child_process模块可以在其他进程上产生、派生,并执行工作。child_process模块提供了一个ChildProcess的新类,它可以作为从父进程访问子进程的表示形式。Process模块也是ChildProcess对象。当你从父模块访问process时,它是父ChildProcess对象,当你从子进程访问Process是,它是ChildProcess对象了解一个对象无外乎事件、方法、属性。ChildProcess也是一样。下面列出一些常用的事件、方法和属性。messag免费云主机域名e:当ChildProcess对象调用send()方法来发送数据时触发。error:在工作进程中出现错误时发出。该处理程序接收一个错误对象作为唯一的参数。exit:当工作进程结束时发出。该处理程序接收两个参数,code,signal.close:当工作进程的所有stdio流都已经终止的时候发出。与exit不同的是,因为多个进程可以共享相同的stdio流。disconnect:当disconnect()在一个工作进程上被调用时发出。kill([signal]):导致操作系统发送一个kill信号给子进程。默认是SIGTERM.send(message,[sendHandle]):将消息发送到句柄。消息可是字符串或对象。sendhandle可以把TCPServer或socket对象发送到客户端。这允许客户端进程共享相同的端口和地址。disconnect():关闭父进程与子进程之间的进程通信(或IPC)通道,并把父进程和子进程的连接标志都设置为false。stdin:输入Writable流。stdout:标准输出Readable流。strerr:用于输出错误的标准输出Readable流。pid:进程的ID。connected:一个布尔值。在disconnect()被调用后,它被设置为false,当是false时,就不能将消息发送给子进程。exec()函数在一个子shell中执行系统命令。几乎可以执行能从控制台提示符下执行的任何东西,如二进制可执行文件、shell脚本、Python脚本或批处理文件。exec(command,[options],callback)函数返回一个ChildProcess对象command:字符串,指定在子shell中执行的命令。options:对象,指定执行命令时使用的设置。选项如下:cwd:指定子进程执行的当前工作目录env:一个对象,指定property:value作为环境的键/值对encoding:指定存储命令的输出时输出缓冲区使用的编码maxBuffer:指定stdout、stderror输出缓冲区的大小。默认200*1024.timeout:指定父进程在杀掉子进程之前,如果子进程未完成等待的毫秒数。默认0killSignal:指定终止子进程时使用的kill信号。默认SIGTERM。callback:接收error、stdout、stderr3个参数。输出结果:它与exec()相似,不同的是execFile()没有使用子shell,执行的命令必须是一个二进制可执行文件Linux的shell脚本和Windows的批处理文件不能使用ecexFile().execFile(file,args,options,callback)也是返回一个ChildProcess。file:字符串,执行要执行的可执行文件的路径。args:数组,指定传递给可执行文件的命令行参数。options:参考exec()的。callback:参考exec().spawn(cmd,[args],[options])函数产生一个进程,连接它们之间的stdio、stdout、stderr的管道,然后在新的线程中使用spawn()执行文件。它和上面两个的主要区别是产生的进程中的stdin可以进行配置,并且stdout、stderr都是父进程中的Readable流。这意味着exec()、execFile()必须先执行完成,才能读取缓冲区输出,但一旦一个spawn()进程的输出数据已被写入就可以读取它(这个可以从它们3个的输出结果的顺序可以看出,上面两个都是先执行exit事件,而spawn()exit处理是在后面)。cmd、args和上面两个的一样。options也可以设置cwd、env,还可以设置detached、stdio。detached:布尔值,true时使子进程成为新进程组的组长,即使父进程退出,也会继续,可以使用child_unref()使得父进程退出之前不等待子进程stdio:定义子进程stdio配置([stdin,stdout,stderr]).默认[0,1,2].此字符串定义每个输入输出流的配置。Node.js提供了另外一种进程产生方式——派生。它主要是执行在一个单独的处理器上运行另外一个V8引擎实例中的Node.js模块代码。可以用派生来并行运行多个服务。不过这需要时间来运转V8的一个新实例,每个实例需要大约10M的内存,所以应该把派生的进程设计为存活期更长的,不需要大量派生的进程。与spawn不同的是,它不能为子进程配置stdio。可以使用ChildProcess对象中的send()机制在父进程与子进程间通信。fork(modulePath,[args],[options])对象也是返回一个ChildProcess对象。modulePath:字符串,指定被新的Node.js实例启动的JavaScript文件路径。args:数组,指定传递给node命令的命令行参数。options:参数对象,指定执行命令时使用的设置。cwd、env上面有。encoding:指定数据写入输出流时和穿越send()IPC机制时使用的编码execPath:指定用于创建产生Node.js进程的可执行文件。silent:一个布尔值,true时将导致派生的进程中的stdout和stderr不与父进程相关联,默认false。Child.send()父进程向子进程发送消息,Process.send()是子进程向父进程发送消息。输出结果:上面的代码是在主进程中创建3个子进程,父进程给子进程发消息,子进程接收并给父进程发消息。以上就是关于“Node.js进程管理之子进程实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。

相关推荐: vue花括号数据绑定失败怎么解决

这篇文章主要介绍了vue花括号数据绑定失败怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue花括号数据绑定失败怎么解决文章都会有所收获,下面我们一起来看看吧。如下所示:{{message}}main.js如下图所示,只包…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/19 11:38
下一篇 03/19 11:42

相关推荐