意图:使用指定参数调用外部应用程序,然后退出脚本。如何在Node.js脚本中分离衍生的子进程?
下面的脚本不能正常工作,因为它应该:
#!/usr/bin/node
var cp = require('child_process');
var MANFILE='ALengthyNodeManual.pdf';
cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true});
事情尝试:exec
- 不分离。提前
意图:使用指定参数调用外部应用程序,然后退出脚本。如何在Node.js脚本中分离衍生的子进程?
下面的脚本不能正常工作,因为它应该:
#!/usr/bin/node
var cp = require('child_process');
var MANFILE='ALengthyNodeManual.pdf';
cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true});
事情尝试:exec
- 不分离。提前
非常感谢从node.js的文档:
默认情况下,父母将等待沾边儿退出。为了防止父母等待给定的孩子,请使用child.unref()方法,并且父母的事件循环不会将孩子包括在其引用计数中。
使用分离选项启动长时间运行的进程时,除非提供了未连接到父级的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();
我解决了这个问题:
app.js
require('./spawn.js')('node worker.js');
spawn.js
module.exports = function(command) {
require('child_process').fork('./spawner.js', [command]);
};
spawner.js
require('child_process').exec(
'start cmd.exe @cmd /k "' + process.argv[2] + '"',
function(){}
);
process.abort(0);
即使你选择了一个答案,也可以在这里添加,因为我的谷歌搜索没有为我提供明显的替代解决方案。 – CarbonDonuts
正如您所见,这是特定于操作系统的。对于那些在OS X和Unix/Linux上不太有用的人。接受的答案使用node.js自己的标准库。 –
意图是:_创建一个分离的命令终端并传递一个command_ aka启动一个进程。 'child_process'可悲地略低于在这方面从主人产生独立进程的需要。只需更换你的Linux风格:xterm,xdg-open。除非你能告诉我如何用你的代码来做到这一点...那么在Windows和Linux上都可以。 ; P就像我说的,我试图解决一个接近但不是很接近你想要的问题。谷歌把我扔在这里,作为我放弃并为自己想出一些东西之前的最后希望。抱歉,添麻烦了。 – CarbonDonuts
谢谢一堆!有用。 –
您可以为stdin,stdout,stderr设置“ignore”: 'stdio:['ignore'/ * stdin * /,'ignore'/ * stdout * /,'ignore'/ * stderr * /]' –