子进程会继承父进程的哪些内容_【学习教程】Node.js创建子进程方法

来源 | https://github.com/CommanderXL/biu-blog/issues/25

exec

其中exec可用于在指定的shell当中执行命令。不同参数间使用空格隔开,可用于复杂的命令。
const { exec } = require('child_process')exec('cat *.js bad_file | wc -l')
exec方法用于异步创建一个新的子进程,可以接受一个callback。
exec('cat *.js bad_file | wc -l', (err, stdout, stderr) => {  console.log(stdout)})
传给回调的stdout和stderr参数会包含子进程的stdout和stderr的输出。

execFile

child_process.execFile(file[, args][, options][, callback])
const { execFile } = require('child_process')execFile('node', ['--version'], (err, stdout, stderr) => {  console.log(stdout)})
不是直接衍生一个shell。而是指定的可执行的文件直接创建一个新的进程。

fork

child_process.fork(modulePath[, args][, options])
创建一个新的node子进程。调用该方法后返回一个子进程的对象。通过fork方法创建出来的子进程可以和父进程通过内置的ipc通道进行通讯。衍生的 Node.js 子进程与两者之间建立的 IPC 通信信道的异常是独立于父进程的。每个进程都有自己的内存,使用自己的 V8 实例。由于需要额外的资源分配,因此不推荐衍生大量的 Node.js 进程。其中在options的配置信息当中:

silent

父子进程间stdin/stdout/stderr之间的通讯。如果置为true,那么子进程的标准输入输出都会被导流到父进程中:
parent.jsconst { fork } = require('child_process')const fd = fork('./sub.js')fd.stdout.on('data', data => console.log(data))sub.jsconsole.log('this is sub process')
一般在子进程中如果有stdin的时候,可将stdin直接导入到父进程中,这样可进行tty和shell的交互。如果置为false,那么子进程的标准输入输出都会继承父进程的。stdio关于这个的配置见下文。spawn
child_process.spawn(command[, args][, options])
上面说到的exec,execFile和fork创建新的子进程都是基于这个方法进行的封装。调用这个方法返回子进程对象。

父子进程间的通讯

其中通过fork方法和spawn创建新的子进程时,在配置选项中有关于stdio的?字段:这个字段主要用于父子进程间的管道配置。默认情况下,子进程的 stdin、 stdout 和 stderr 会重定向到 ChildProcess 对象上相应的 subprocess.stdin、 subprocess.stdout 和 subprocess.stderr 流。这等同于将 options.stdio 设为 ['pipe', 'pipe', 'pipe']。pipe - 等同于 [pipe, pipe, pipe] (默认)
ignore - 等同于 [ignore, ignore, ignore]
inherit - 等同于 [process.stdin, process.stdout, process.stderr] 或 [0,1,2]其中inherit即继承父进程的标准输入输出(和父进程共享)。
const { spawn } = require('child_process');// 子进程使用父进程的 stdiosspawn('prg', [], { stdio: 'inherit' });// 衍生的子进程只共享 stderrspawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });// 打开一个额外的 fd=4,用于与程序交互spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
本文完~b5d7e8bec99d797ef2755602612a55ce.png

b422534c65c9e9709e2bee4c8276d108.png

免责申明:本站所有内容均来自网络,我们对文中观点保持中立,对所包含内容的准确性,可靠性或者完整性不提供任何明示或暗示的保证,请仅作参考。若有侵权,请联系删除。

ee070d8478ccb5568e9c6350fd0b1b48.png

54e535c07a3e4e325dd162b8ea0c4207.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据

展开全部 1、创建测试表; create table test_col_1(id number, var varchar2(200)); create table test_col_2(id number, var varchar2(200)); 2、插入测试数据, insert into test_col_1 select level*8, var||32313133353236313431303231363533e59b9ee7ad9431333431373839l…

MySQL建表添加乐观锁字段_Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化...

Java秒杀系统优化-Redis缓存-分布式session-RabbitMQ异步下单-页面静态化项目介绍基于SpringBootMybatis搭建的秒杀系统,并且针对高并发场景进行了优化,保证线程安全的同时极大地提高了服务器的吞吐量,主要优化手段有页面静态化、Redis缓存(页…

叶金荣mysql教程_mysql优化--叶金荣老师讲座笔记

copy to tmp table执行ALTER TABLE修改表结构时建议:凌晨执行Copying to tmp table拷贝数据到内存中的临时表,常见于GROUP BY操作时建议:创建索引Copying to tmp table on disk临时结果集太大,内存中放不下,需要将内存…

python qqbot实现qq聊天机器人_Python QQBot库的QQ聊天机器人

本文实例为大家分享了Python QQBot库的QQ聊天机器人的具体代码,供大家参考,具体内容如下1.安装pip install qqbot2.主动发出消息from qqbot import _bot as bot# 登录QQbot.Login([-q, 2816626661])buddy 获取指定名称/备注的好友group 获取群buddy bot…

tp5 mysql实现消息队列_TP5系列 | Queue消息队列

消费信息如下ThinkPHP5 Queue消息队列优点1、Queue内置了 Redis,Database,Topthink ,Sync这四种驱动,本文使用Redis驱动2、Queue消息队列适用于大并发或者返回结果 时间有点长并需要批量操作的第三方接口,可用于短信发…

java创建临时文件夹_java创建临时文件

[java]代码库/*** 创建临时文件** param prefix* 临时文件名的前缀* param suffix* 临时文件名的后缀* param dirName* 临时文件所在的目录,如果输入null,则在用户的文档目录下创建临时文件* return 临时文件创建成功返回true,否则返回false*…

linux cmake编译安装mysql_Linux源码安装MySQL 5.6.12 (Cmake编译)

Linux源码安装MySQL 5.6.12 (Cmake编译)1.安装make编译器(默认系统自带)下载地址:tar zxvf make-3.82.tar.gzcd make-3.82./configuremakemake install2.安装bison下载地址:tar zxvf bison-2.5.tar.gzcd bison-2.5./configuremakemake install3.安装gcc-…

JAVA怎么实现网页退出系统_java后台实现js关闭本页面,父页面指定跳转或刷新操作...

关闭本页面,跳转到百度response.setCharacterEncoding("gbk");PrintWriter outresponse.getWriter();out.print("");out.print("");关闭本页面,刷新父页面response.setCharacterEncoding("gbk");PrintWriter ou…

java 布尔逻辑运算符_Java运算符

Java语言提供许多操作符。操作符是特殊的符号(symbol),它对一个或者两个、三个的操作数进行运算,然后返回一个结果,最简单的就像我们一年级学到的 -号。一般地,可以将运算符分为四大类:算数运算符、位运算符、关系运算…

Java自动化获取页面主题_基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

1. 启动浏览器前边有详细介绍启动三种浏览器的方式(IE、Chrome、Firefox);private WebDriver driver null;private String chromeDriverDir "D:\\workspace\\A_Test\\resource\\chromedriver.exe";/*** 打开谷歌浏览器;*/public void openCh…

js java 反射机制_java 类加载机制和反射机制

一.类的加载机制jvm把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成jvm可以直接使用的java类型的过程。(1)加载将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一…

lambda 流 peek java_JDK8 流与λ表达式

λ表达式什么是λ表达式λ表达式有三部分组成:参数列表,箭头(->),以及一个表达式或者语句块。public int add(int x, int y) {return x y;}转换为λ表达式(int x, int y) -> x y;去除参数类型(x, y) -> x y;无参 以及 只有一个参…

理解java虚拟机工作后了解吗_JAVA入门到再次入门——深入理解JAVA虚拟机(二)|七日打卡...

前言为什么叫做入门到到再次入门请参考前一篇或个人博客,在此不再赘述,嗯哼,了解了JVM的基本运行流程以及内存结构,算是初步认识了JVM,跟着课本往前走,继续了解根据JVM的内存模型探索java当中变量的可见性以…

java访问错误404_如何解决 Java web 项目中的 404 错误

在使用 Tomcat 进行 Java Web 开发的时候,经常会遇到以下 HTTP 404 错误:错误代码为 HTTP 404(未找到),描述信息是:“The origin server did not find a current representation for the target resource or is not willing to di…

java double 的精度_Java Double的精度问题

Java.text类 DecimalFormatjava.lang.Objectjava.text.Formatjava.text.NumberFormatjava.text.DecimalFormatvoid setMaximumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最大数字位数。void setMinimumFractionDigits(int newValue) …

java餐饮管理系统图片,基于jsp的酒店餐饮管理系统-JavaEE实现酒店餐饮管理系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的酒店餐饮管理系统, 该项目可用各类java课程设计大作业中, 酒店餐饮管理系统的系统架构分为前后台两部分, 最终实现在线上进行酒店餐饮管理系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类酒店餐饮管…

php 验证码一直不对,ThinkPHP验证码老是出错怎么办

ThinkPHP验证码老是出错的解决办法:1、找到服务器php配置文件php.ini在网站根目录下建一个info.php文件。例如:D:\wwwRoot\wp 这个是网站的根目录,在此目录下,新建一个txt文档,输入如下代码:然后另存为info…

如何在php中插入数据并修改,php怎么同时向2张表里插入数据

情况是这个样子的:我要做一个发消息的表,因为接受人可能是多个,所以又给接收人一单独的表,(这种方案好还是全部都放到一张表里好点呢?)2张表的字段如下:message_id是第一张表的主键,如果收件人有…

java设计模式之道文字版,Java Web设计模式之道 PDF

资源名称:Java Web设计模式之道 PDF第一部分 仙人指路——设计模式简介第1章 设计模式概述1.1 设计模式是什么1.2 软件设计模式的发展历程1.3 作者阐述软件设计模式的主要方式第二部分 设计红宝书——设计模式原则详解第2章 设计原则之开闭原则2.1 何谓开闭原则2.2 …

matlab变量由非标量,matlab中的if语句

有条件性地执行语句语法if expressionstatementsend描述MATLAB计算表达式,如果产生一个逻辑真或者非零结果,然后就执行一条或者多条MATLAB命令语句。当有嵌套if时,每一个if必须和一个相应的end匹配。当你在if语句里面嵌套使用else if或者else…