意圖:使用指定參數調用外部應用程序,然後退出腳本。如何在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 * /]' –