当前位置: 首页 > 面试题库 >

如何在Node.js脚本中分离生成的子进程?

申屠俊发
2023-03-14
问题内容

目的:使用指定的参数调用外部应用程序,然后退出脚本。

以下脚本无法正常工作:

 #!/usr/bin/node
 var cp = require('child_process');
 var MANFILE='ALengthyNodeManual.pdf';
 cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true});

尝试过的事情:exec-不分离。提前谢谢了


问题答案:

从node.js文档中:

默认情况下,父级将等待分离的子级退出。为防止父级等待给定的子级,请使用child.unref()方法,并且父级的事件循环将其引用计数中不包括该子级。

使用detached选项启动长时间运行的进程时,除非该进程提供了未连接到父级的stdio配置,否则该进程将不会在后台运行。如果父代的stdio被继承,则子代将保持与控制终端的连接。

您需要像下面这样修改代码:

#!/usr/bin/node
var fs = require('fs');
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var cp = require('child_process');
var MANFILE='ALengthyNodeManual.pdf';
var child = cp.spawn('gnome-open', [MANFILE], { detached: true, stdio: [ 'ignore', out, err ] });
child.unref();


 类似资料:
  • 问题内容: 我使用Expect运行测试脚本。通过退出代码测试返回成功/失败。但期望返回等效的退出代码。如何使期望返回正确的退出状态? 我的测试是使用 psql (postgresql命令处理器)运行的sql脚本。由于psql不允许将数据库密码指定为命令行参数,因此需要 脚本来 执行。 因此,我的期望脚本如下所示: 问题答案: 您已经在循环结束时等待了,您只需要使用和结果即可: 以0退出。 以1.退

  • 问题内容: 我正在尝试调试使用以下方法创建的子Node.JS进程: 问题是,在IntelliJ / WebStorm中运行时,父进程和子进程都在同一端口上启动。 因此,它仅调试父进程。 有什么方法可以设置IntelliJ来调试子进程或强制其在其他端口上启动,以便我可以在远程调试中进行连接? 问题答案: 这是node.js中一个已知的错误,该错误最近已得到修复(尽管未反向移植到v0.10)。 有关更

  • 问题内容: 我试图执行一个脚本,该脚本执行一个EXPECT脚本和一个生成的进程,其中包含退出代码。但是我无法将生成的进程的退出代码获取到主脚本。作为成功,我总是零。 期望脚本是: 产生的脚本: 执行Expect脚本: 问题是我无法获得生成的退出返回代码以期望脚本。我希望生成脚本的退出代码3到主脚本,并且主脚本应该以退出代码3退出。 请帮助我将生成的退出代码获取到主脚本。 问题答案: 在格伦的帮助下

  • 问题内容: 我试图在javascript中生成一个进程,并在一段时间后将其杀死(出于测试目的)。 最后,该过程将是一个无限循环,我需要在指定的时间使用不同的参数重新启动,因此我认为生成该过程并杀死它是执行此操作的最佳方法。 我的测试代码是: 结果是: 但是我仍然需要发送ctrl + C来结束程序。我想念什么? 在Raspbian的节点0.10.17上,omxplayer是二进制文件(视频播放器)。

  • 问题内容: 这似乎是一个基本问题,但是我找不到任何文档: 分叉和生成node.js进程有什么区别?我已经读过分叉是生成的一种特殊情况,但是使用它们的不同用例/重用分别是什么? 问题答案: Spawn是用于运行系统命令的命令。运行spawn时,会向其发送系统命令,该命令将在其自己的进程上运行,但不会在节点进程内执行任何其他代码。您可以为生成的进程添加侦听器,以允许您的代码与生成的进程进行交互,但是不

  • 问题内容: 我已经在MySQL Workbench中使用表,外键等创建了一个EER图,现在我想生成一个“ .sql”脚本来创建该数据库。我怎么做? 问题答案: 尝试: