2010-01-02 15 views
5

मेरा आवेदन दो भागों में विभाजित है। मुख्य आवेदन और एक सहायक उपकरण। सहायक उपकरण उन्नत अनुमतियों के साथ एक कार्य करता है। (केवल महत्वपूर्ण सेटिंग शामिल थे।)लॉन्च डी का उपयोग करके मैं एप्लिकेशन के कई उदाहरण कैसे लॉन्च कर सकता हूं?

<key>UserName</key> 
<string>root</string> 
<key>ProgramArguments</key> 
<array> 
    <string>/Library/PrivilegedHelperTools/helperTool</string> 
</array> 
<key>Sockets</key> 
<dict> 
    <key>IPC</key> 
    <dict> 
     <key>SockPathName</key> 
     <string>/tmp/TheSocket</string> 
    </dict> 
</dict> 

वहाँ सॉकेट के लिए हर कनेक्शन के लिए एक नया सहायक उदाहरण शुरू करने के लिए एक रास्ता है:

launchd plist इस तरह दिखता है?

या वैकल्पिक रूप से, क्या एकाधिक अनुरोधों को संभालने के लिए कोई मौजूदा टेम्पलेट है? (मैं इस अपने आप को इस समय कर रहा हूँ, जो काफी बदसूरत कोड का एक बहुत कुछ है।)

उत्तर

1

यह शायद Stackoverflow में मेरी पहली जवाब :)

पहले, गलत पर प्रतीक्षा के साथ सेट inetdCompatibility हो जाएगा। यह सॉकेट स्वीकार करने के लिए लॉन्च किया जाएगा।

<key>inetdCompatibility</key> 
<dict> 
    <key>Instances</key> 
    <integer>42</integer> 
    <key>Wait</key> 
    <false/> 
</dict> 

एक बार, लॉन्च ने सॉकेट स्वीकार कर लिया। सॉकेट के लिए स्वीकृत आपके कार्यक्रम में STDIN_FILENO के रूप में पारित किया जाएगा। आपका launchd प्रक्रिया का उपयोग कर सकते इस प्रकार सॉकेट स्वीकार किए जाते हैं: (मैं खुला स्रोत sshd से कोड कॉपी)

int sock_in; 
int sock_out;   
sock_in = sock_out = dup(STDIN_FILENO); 
NSLog(@"socket descriptor: %d", sock_in); 

sock_in पहले से ही स्वीकार किया जाता है। तो आपका प्रोग्राम इसे स्वीकार किए बिना इसका उपयोग कर सकता है।

मुझे लगता है कि आपके पास पहले से ही एक प्लिस्ट है जो आपके लिए सॉकेट पोर्ट की निगरानी करेगा। यदि नहीं, तो ऐसा करना संभव है। यह आईपीवी 4 टीसीपी के साथ पोर्ट 18411 के लिए लॉन्च सॉकेट सुनो बनाएगा।

<key>Sockets</key> 
<dict> 
    <key>Listeners</key> 
    <dict> 
     <key>SockServiceName</key> 
     <string>18411</string> 
     <key>SockType</key> 
     <string>stream</string> 
     <key>SockFamily</key> 
     <string>IPv4</string> 
    </dict> 
</dict> 
+0

आपके उत्तर के लिए धन्यवाद। मैं थोड़ा दुखी हूं कि ऐसा करने का एकमात्र तरीका सीधे लॉन्च द्वारा पेश किए जाने की बजाय एक संगतता सुविधा का उपयोग करना प्रतीत होता है। मैं दो दिन के लिए बक्षीस खुला रखूंगा, शायद कोई और हमारे काम से ज्यादा जानता है। –

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