Intent:使用指定的参数调用外部应用程序,然后退出脚本。
以下脚本无法正常工作:
#!/usr/bin/node
var cp = require('child_process');
var MANFILE='ALengthyNodeManual.pdf';
cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true});
尝试的事情:exec
- 没有分离。非常感谢提前
答案 0 :(得分:38)
来自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();
答案 1 :(得分:1)
我解决这个问题的方法:
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);