当前位置: 首页 > 知识库问答 >
问题:

如何分叉另一模块的进程

柳晔
2023-03-14

太长别读:如何分叉位于当前运行进程之外的进程?

我正在尝试使用 Nodejs 的child_process,以便在父级的进程出口上启动另一个 nodejs 进程。

我成功地用exec执行了这个过程,但我需要子进程独立于父进程,这样父进程就可以退出而不等待子进程,因此我尝试使用分离的 spawn:true,stdio:'ignore' 选项和 unf()ing 进程:

设置选项。分离为true使得子进程可以在父进程退出后继续运行。

生成(“节点MY_PATH”, [], {分离: 真, stdio: 'ignore'}).unref();

这将产生:

节点MY_PATH enent错误。不幸的是,我没能解决这个问题。

生成并再次阅读文档时遇到麻烦之后,我认为我应该实际使用fork

child_process.fork()方法是child_process.spawn()的特例,专门用于生成新的Node.js进程。

fork()不将命令作为其第一个参数,但modulePath似乎不适合,因为我尝试作为子进程运行的脚本不在当前正在运行的进程的目录中,但在他的依赖项中。

回到起始 TL;DR - 如何分叉位于当前正在运行的进程之外的进程?

任何帮助都将不胜感激!

编辑:

生成 ENOENT 错误提供解决方案也可能非常有帮助!

共有1个答案

洪高刚
2023-03-14

下面的代码应该允许您执行所需的操作。

var Path = require('path');
var Spawn = require('child_process').spawn;

var relative_filename = '../../node_modules/bla/bla/bla.js';

Spawn('node', [Path.resolve(__dirname, relative_filename)], {detached: true, stdio: 'ignore'}).unref();

process.exit(0);
 类似资料:
  • 问题内容: 假设我有一个名为的软件包,其中包含: 和: 然后我执行以下脚本: 这是我的期望: 这是我得到的: 谁能解释我的误解? 问题答案: 您正在使用。在导入模块的全局范围(或​​发生import语句的任何范围)中成为符号。 当您为指定新值时,您也只是在更改哪些值点,而不是实际值。尝试直接使用in导入,并通过设置在那里进行实验。这样,您实际上将在此上下文中修改哪个是“实际”值。 它有点令人费解,

  • 问题内容: 我已使用以下命令“ go mod init database”在“数据库”文件夹中的“ GOPATH”之外创建了个人使用的模块库,但我不知道: 如何在其他模块中使用/ 导入 该模块? 操作系统: Windows 7 ,Go: v1.11 问题答案: 最简单,可行的现成解决方案是将您的包/模块放入VCS(例如github.com),因此其他包(在其他模块内部)可以通过导入来简单地引用它:

  • 我有一个项目,我已经做了一些重构(和模块名称澄清)。 因此,原来是的模块现在变成了。现在,为了更好的兼容性,我想让这个项目产生的jar也可以作为(如果您愿意,可以使用它的旧名称)。 我已经在这些GAV坐标下创建了一个类型的项目,并尝试使用maven依赖插件和build helper maven插件的组合来连接jar。 不幸的是,每次我构建项目时,jar都不在maven存储库中,maven说 所以我

  • 我有两个模块。应用程序和模块测试。模块应用程序包含带按钮的主活动。模块测试包含主要活动二。我想通过点击按钮从模块应用程序运行Test/MainActivity。但Android仍然无法从模块测试中看到主要活动。见下文。 模块应用清单: 模块测试清单: 在模块app MainActivity中为单击按钮和运行第二个活动编码: 在控制台我得到一个错误: 带系统。错误:java。lang.ClassNo

  • 问题内容: 在我的angularJS应用程序中,我有两个模块:模块A和模块B。 如何在模块B中调用该函数? 问题答案: 您需要在 模块A中 定义一个工厂: 然后使用 模块B中* 的工厂: *