[英]How to detach a spawned child process in a Node.js script?
意圖:使用指定的參數調用外部應用程序,然后退出腳本。
以下腳本不能正常工作:
#!/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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.