2012-10-13 11 views
16

आशय: निर्दिष्ट तर्क, और बाहर निकलने स्क्रिप्ट के साथ एक बाहरी अनुप्रयोग कहते हैं।कैसे एक Node.js लिपि में एक पैदा बच्चे प्रक्रिया से अलग करने?

निम्न स्क्रिप्ट एकदम सही ढंग से काम नहीं करता है:

#!/usr/bin/node 
var cp = require('child_process'); 
var MANFILE='ALengthyNodeManual.pdf'; 
cp.spawn('gnome-open', ['\''+MANFILE+'\''], {detached: true}); 

बातें करने की कोशिश की: exec - अलग नहीं है। अग्रिम

उत्तर

25

में बहुत धन्यवाद Node.js प्रलेखन से:

डिफ़ॉल्ट रूप से, माता-पिता अलग बच्चे बाहर निकलने के लिए इंतजार करेगा। किसी दिए गए बच्चे के लिए इंतजार कर से माता-पिता को रोकने के लिए child.unref() विधि का उपयोग करें, और माता पिता की घटना पाश इसके संदर्भ गिनती में बच्चे शामिल नहीं होंगे।

अलग विकल्प का उपयोग करते एक लंबी चलने वाली प्रक्रिया शुरू करने के लिए, इस प्रक्रिया को जब तक यह एक 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

धन्यवाद एक गुच्छा! यह काम करता हैं। –

+2

आप stdin, stdout, stderr के लिए "अनदेखा" सेट कर सकते हैं: 'stdio: ['अनदेखा'/* stdin * /, 'अनदेखा करें'/* stdout * /, 'अनदेखा करें'/* stderr * /]' –

3

इस समस्या का समाधान मेरी:

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); 
+0

I मैं इसे यहां जोड़ रहा हूं, भले ही आपने कोई जवाब चुना हो, क्योंकि मेरी Google खोजों ने मुझे कोई स्पष्ट वैकल्पिक समाधान नहीं छोड़ा है। – CarbonDonuts

+0

यह है, जैसा कि आप देख सकते हैं, ओएस-विशिष्ट। ओएस एक्स और यूनिक्स/लिनक्स के लिए बहुत उपयोगी नहीं है। स्वीकार्य उत्तर node.js अपने मानक पुस्तकालयों का उपयोग करता है। –

+2

आशय था करने के लिए: एक अलग आदेश टर्मिनल _create और पारित एक command_ उर्फ ​​एक प्रक्रिया शुरू करते हैं। 'child_process' इस सम्मान में मास्टर से स्वतंत्र प्रक्रियाओं को जन्म देने की आवश्यकता से थोड़ी कम हो जाती है। बस अपने लिनक्स स्वाद के साथ प्रतिस्थापित करें: xterm, xdg-open। जब तक आप मुझे अपने कोड के साथ ऐसा करने का तरीका नहीं दिखा सकते ... जो तब विंडोज़ और लिनक्स दोनों पर काम करता है। ; पी जैसे मैंने कहा कि मैं एक ऐसी समस्या को हल करने की कोशिश कर रहा हूं जो करीब है लेकिन जहां आप बनना चाहते हैं उसके नजदीक नहीं है। Google ने मुझे छोड़ दिया और मेरी आखिरी उम्मीद के रूप में मुझे छोड़ दिया और इससे पहले कि मैंने खुद को छोड़ दिया। परेशानी के लिए खेद हैं। – CarbonDonuts

संबंधित मुद्दे