簡體   English   中英

如何在Node.js腳本中分離生成的子進程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM