来源 | 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'] });

本文完~

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

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

  1. 子进程及时知道父进程已经退出的最简单方案

    [精彩] 子进程及时知道父进程已经退出的最简单方案? http://www.chinaunix.net 作者:yuonunix  发表于:2003-10-31 10:14:14 [发表评论] [查看原 ...

  2. fork 和 exec 对子进程继承父进程处理信号处理函数的影响

    当一个进程调用fork时,因为子进程在开始时复制父进程的存储映像,信号捕捉函数的地址在子进程中是有意义的,所以子进程继承父进程的信号处理方式.         但是当子进程调用exec后,因为exec ...

  3. 子进程中获取父进程id_进程全家桶,看这一篇就够了 | 原力计划

    作者 | 看,未来 责编 | 王晓曼 出品 | CSDN博客 初见进程,先查一下户口 1.进程环境 进程控制块PCB:就是进程在操作系统中的"户口",具体实现是 task_stru ...

  4. 在 Node.js 中用子进程操作标准输入/输出

    翻译:疯狂的技术宅 原文:http://2ality.com/2018/05/chi... 本文首发微信公众号:jingchengyideng 欢迎关注,每天都给你推送新鲜的前端技术文章 在本中,我们 ...

  5. 启继承父位在什么时候_为什么少儿口才现在越来越受到家长们的重视

    情商口才是个人素养.能力和智慧的一种综合反映,随着社会的发展,少年儿童的早期教育越来越受到家长的重视,特别是在培养孩子的语言表达能力中,更多的家长开始寻求各种方法来锻炼孩子的语言表达能力. 源自于美国 ...

  6. java抓取网页标题内容_[Java教程]java 网页页面抓取标题和正文

    [Java教程]java 网页页面抓取标题和正文 0 2014-07-10 09:01:30 import java.io.BufferedReader;import java.io.IOExcept ...

  7. python进阶课程目标 学习内容_Python学习教程(Python学习路线):第九天-面向对象进阶...

    面向对象进阶 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息.为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程 ...

  8. php 输出数组内容_关于打印数组的10种方法详解

    假设有一个数组:<?php $arr=["PHP","中文","网"]; echo $arr; ?>请问上面的代码会输出什么?上 ...

  9. js 点击侧边栏展示内容_【DEMO】JS实现侧边栏信息展示效果

    /*使用块模式--立即执行的匿名函数*/(function(){//所有声明的变量在构造函数内部,不会向windows添加任何属性 /*构造函数的基本规范: 1.构造函数的第一个字母是大写的,与其他函 ...

最新文章

  1. 为什么工厂模式可以解耦?(一)
  2. Python 浮点数运算
  3. C++Builder中使用Pas文件
  4. linux 显示文字在桌面背景,Linux下Xwindow的字体配置(所谓的字体美化)
  5. 电源纹波分析及测试方法
  6. docker安装kafka,超级简单的
  7. Java-volatile是如何实现的
  8. pytorch convLSTM实现
  9. Ubuntu sudo nopasswd方法
  10. 判断素数的c语言程序_C素数程序
  11. USBoot /WinHex恢复故障U盘的数据文件
  12. 【Pix4d精品教程】pix4d mapper相机未校准后手动添加连接点完美案例图文教程
  13. python 公众号爬虫_微信公众号爬虫,看这个就足够了
  14. 妙趣横生的英语单词 看见英语单词头不大(zt)
  15. js根据银行卡号进行判断属于哪个银行并返回银行卡类型
  16. Linux系统(三)系统基础扫盲大全
  17. TOMVIP邮箱贴心服务,祝您做好邮件营销
  18. 华为胡厚崑:不让任何一个人在数字世界中掉队
  19. UG背景颜色修改和截图
  20. 下个月你就要找工作了,面试前要好好了解这些事儿

热门文章

  1. 一行命令导致的数据丢失,阿里工程师是如何恢复的?
  2. 精打细算使用MaxCompute搭建数仓
  3. 【 CDN 最佳实践】CDN 命中率优化思路
  4. 数字孪生+交通,到底有啥用?
  5. 云原生之上,亚马逊云科技发布多项容器与Serverless服务,持续发力现代化应用
  6. 独家对话谢宝友:做一款类似于 Linux 的国产操作系统 | 人物志
  7. 强推!十大顶级大数据可视化工具 | 程序员硬核评测
  8. 外卖小哥是怎样炼成的?
  9. 关于腾讯云丢数据事件的一些看法
  10. cv曲线面积的意义_几何直觉的魅力:sinx曲线下的面积原理是如此的美妙