spawn与exec的相同点是什么

发布时间:2022-03-18 14:30:54 作者:iii
来源:亿速云 阅读:229

本篇内容主要讲解“spawn与exec的相同点是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spawn与exec的相同点是什么”吧!

  Node.js基于事件驱动来处理并发,它本身是以单线程模式运行的。Node.js通过child_process开启子进程执行指定程序。主要包括4个异步进程函数(spawn,exec,execFile,fork)和3个同步进程函数(spawnSync,execFileSync,execSync)。一般我们比较常用的是spawn和exec这两个方法。其中异步进程函数spawn是最基本的创建子进程的函数,其他三个异步函数都是对spawn不同程度的封装。spawn只能运行指定的程序,参数需要在列表中给出,而exec可以直接运行复杂的命令。

  默认情况下,和的管道在父 Node.js 进程和衍生的子进程之间建立。这些管道具有有限的(与平台相关)容量。 如果子进程在没有捕获输出的情况下写入超出该限制的 stdout,则子进程将阻塞等待管道缓冲区接受更多的数据。 这与 shell 中的管道行为相同。 如果不需要输出,则使用      方法异步地衍生子进程,并且不阻塞 Node.js 事件循环。而方法则以同步的方式提供等效功能,但会阻止事件循环直到衍生的进程退出或终止。

  为方便起见,模块提供了和的一些同步和异步的替代方法。注意,这些替代方法中的每一个都是基于或实现的。

  :衍生一个 shell 并在该 shell 中运行命令,当完成时则将 和  传给回调函数。:类似于 ,除了它默认会直接衍生命令且不首先衍生 shell。:衍生一个新的 Node.js 进程,并通过建立 IPC 通信通道来调用指定的模块,该通道允许在父进程与子进程之间发送消。: 的同步版本,会阻塞 Node.js 事件循环。: 的同步版本,会阻塞 Node.js 事件循环。

  对于某些用例,例如自动化的 shell 脚本,同步的方法可能更方便。 但是在大多数情况下,同步的方法会对性能产生重大影响,因为它会停止事件循环直到衍生的进程完成。

  child_process.spawn(command[, args][, options])

  child_process.exec(command[, options], callback)

  spawn与exec的相同点

  1、都用于开一个子进程执行指定命令。

  2、都可以自定义子进程的运行环境。

  3、都返回一个ChildProcess对象,所以他们都可以取得子进程的标准输入流、标准输出流和标准错误流。

  spawn与exec的不同点

  1、接受参数的方式:spawn使用了参数数组,而exec则直接接在命令后。

  比如要运行  命令, 使用spawn函数需要写成,而使用exec函数时,可以直接写成。exec是会先进行Shell语法解析,因此用exec函数可以更方便的使用复杂的Shell命令,包括管道、重定向等。

  2、子进程返回给Node的数据量:spawn没有限制子进程可以返回给Node的数据大小,而exec则在options配置对象中有maxBuffer参数限制,且默认为200K,如果超出,那么子进程将会被杀死,并报错:,虽然可以手动调大maxBuffer参数,但是并不被推荐。由此可窥见一番Node.js设置这两个API时的部分本意,spawn应用来运行返回大量数据的子进程,如图像处理,文件读取等。而exec则应用来运行只返回少量返回值的子进程,如只返回一个状态码。

  3、exec方法相比spawn方法,多提供了一个回调函数,可以更便捷得获取子进程输出。这与从返回的ChildProcess对象的stdout或stderr监听data事件来获得输出的区别是: data事件的方式,会在子进程一有数据时就触发,并把数据返回给Node。而回调函数,则会先将数据缓存在内存中(数据量小于maxBuffer参数),等待子进程运行完毕后,再调用回调函数,并把最终数据交给回调函数。

到此,相信大家对“spawn与exec的相同点是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. 漫谈-exec与xargs
  2. exec 与 xargs

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spawn exec

上一篇:vue如何实现路由参数解耦

下一篇:python怎么用ZIP处理列表

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》