【问题标题】:How can keep child process alive even if parent process is terminated即使父进程终止,如何使子进程保持活动状态
【发布时间】:2020-04-20 12:14:06
【问题描述】:

我有一个 Electron 应用程序,我必须启动一个 exe 文件并退出该应用程序。问题是当我尝试退出时,应用程序关闭并且之前也启动了 exe 文件...我希望我的 exe 文件改为打开...

这是我的代码

   var execFile = require('child_process').execFile;
   execFile(filePath).unref();

   const { remote }  = require('electron');
   const { app } = remote;
   app.quit();

如何在 app.quit() 之后打开我的文件并使其保持活动状态?

谢谢

【问题讨论】:

  • 你正在执行你的 exefile 作为应用程序的子进程
  • 因此,当您终止您的应用程序(exefile 的父进程)时,它们都将被终止。
  • 很抱歉这个菜鸟问题,但是...如何在没有 child_process 的情况下执行我的文件?
  • 嗯,你有没有使用过 spawn、exec、fork 而不是 execFile?

标签: javascript node.js cordova electron execfile


【解决方案1】:

我们可以使用分离选项在后台执行它:

const { spawn } = require('child_process');

const child = spawn(`exefile path`, [...args], {
  detached: true,
});

child.unref();

分离的子进程的确切行为取决于操作系统。在 Windows 上,分离的子进程将拥有自己的控制台窗口,而在 Linux 上,分离的子进程将成为新进程组和会话的领导者。

如果在分离的进程上调用 unref 函数,则父进程可以独立于子进程退出。如果子进程正在执行一个长时间运行的进程,这会很有用,但要让它在后台运行,子进程的 stdio 配置也必须独立于父进程。

【讨论】:

    【解决方案2】:

    我用 spawn 解决了这个问题

    var execFile = require('child_process').spawn;
    execFile(filePath, [], {'detached':true});
    
    const { remote }  = require('electron');
    const { app } = remote;
    app.quit();
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2015-09-20
      • 2021-09-16
      相关资源
      最近更新 更多