资讯专栏INFORMATION COLUMN

Node模块--child_process

ormsf / 3135人阅读

摘要:说明模块是的原始模块主要作用执行命令行命令该模块的功能主要由函数提供区分和执行命令第一个参数是将要执行的命令,命令之间的参数使用空格分开第二个参数是回调函数,有三个参数回调中的第一个参数命令执行错误会有值,否则为回调中的第二个参数子进程

1.说明

child_process 模块是 Node.js 的原始模块:

主要作用:执行命令行命令

该模块的功能主要由 child_process.spawn() 函数提供

2.区分exec和spawn 2-1 exec执行命令
const {
  exec
} = require("child_process");
exec("ls -la /usr", (error, stdout, stderr) => {
  console.log(error);
  console.log(stdout);
  console.log(stderr);
});

第一个参数是将要执行的命令,命令之间的参数使用空格分开

第二个参数是回调函数,有三个参数

回调中的第一个参数:命令执行错误会有值,否则为null
回调中的第二个参数:子进程的正常输出内容
回调中的第三个参数:子进程执行错误的输出
2-2 spawn命令
const {
  spawn
} = require("child_process");

const ls = spawn("ls", ["-la", "/usr"]);

ls.stdout.on("data", (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on("data", (data) => {
  console.log(`stderr: ${data}`);
});

ls.on("close", (code) => {
  console.log(`子进程退出码:${code}`);
});

第一个参数是命令

第二个参数是一个数组,数组中的每一个元素是执行命令需要的参数

需要特别注意的是,需要获取执行的内容需要通过流的形式来进行输出

2-3 两者对比

相同点:

都可以用来执行命令行命令

不同点:

exec 用来执行命令,命令和命令后跟的参数是写在一个字符串中,作为函数的第一个参数

spawn 用来执行命令,命令和命令后跟的参数是分开写的

exec 的输出内容是在回调中输出的,一次性分配 200K 大小的内存空间,如果超出这个大小会报错

spawn 的输出内容是通过流的形式进行输出的,没有分配空间,不会报错

总结:spawn 比 exec 使用范围要广,因此,能使用 spawn 的尽量使用 spawn。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/89486.html

相关文章

  • nodejs中的子进程,深入解析child_process模块和cluster模块

    摘要:严格来说,并不是单线程的。其他异步和事件驱动相关的线程通过来实现内部的线程池和线程调度。线程是最小的进程,因此也是单进程的。子进程中执行的是非程序,提供一组参数后,执行的结果以回调的形式返回。在子进程中通过和的机制来接收和发送消息。   node遵循的是单线程单进程的模式,node的单线程是指js的引擎只有一个实例,且在nodejs的主线程中执行,同时node以事件驱动的方式处理IO...

    JinB 评论0 收藏0
  • Node.js child_process模块解读

    摘要:而且方式创建的子进程与父进程之间建立了通信管道,因此子进程和父进程之间可以通过的方式发送消息。与事件的回调函数有两个参数和,代码子进程最终的退出码,如果子进程是由于接收到信号终止的话,会记录子进程接受的值。 在介绍child_process模块之前,先来看一个下面的代码。 const http = require(http); const longComputation = () =>...

    baiy 评论0 收藏0
  • nodejs之process进程小记

    摘要:因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。此外,创建的回调函数具有隔离性,他们之间不会相互影响。我们来看的一个简单例子,他创建了一个子进程,第一个参数是一个命令,第二个参数是回调函数,处理返回结果。 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线...

    Binguner 评论0 收藏0
  • 通过源码解析 Node.js 中进程间通信中的 socket 句柄传递

    摘要:子进程使用反序列化消息字符串为消息对象。在调用这类方法时,遍历列表中的实例发送内部消息,子进程列表中的对应项收到内部消息并处理返回,父进程中再结合返回结果和对应着这个类实例维护的信息,保证功能的正确性。 在 Node.js 中,当我们使用 child_process 模块创建子进程后,会返回一个 ChildProcess 类的实例,通过调用 ChildProcess#send(mess...

    HackerShell 评论0 收藏0
  • 深入理解Node.js 进程与线程(8000长文彻底搞懂)

    摘要:在单核系统之上我们采用单进程单线程的模式来开发。由进程来管理所有的子进程,主进程不负责具体的任务处理,主要工作是负责调度和管理。模块与模块总结无论是模块还是模块,为了解决实例单线程运行,无法利用多核的问题而出现的。 前言 进程与线程是一个程序员的必知概念,面试经常被问及,但是一些文章内容只是讲讲理论知识,可能一些小伙伴并没有真的理解,在实际开发中应用也比较少。本篇文章除了介绍概念,通过...

    Harpsichord1207 评论0 收藏0

发表评论

0条评论

ormsf

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<