यह कैसे पता लगाया जाए कि लॉन्च एजेंट या डेमॉन एक प्रक्रिया शुरू कर रहा है


11

ऑटोडस्क स्मोक को स्थापित करने के बाद, मेरे पास हर समय चलने वाली दो httpd प्रक्रियाएं हैं, और मैं उन्हें रोकना चाहूंगा। जब मैं उपयोग sudo killall httpdकरता हूं , तो वे रुक जाते हैं और तुरंत फिर से चालू हो जाते हैं। गतिविधि मॉनिटर दर्शाता है कि मूल प्रक्रिया लॉन्च की गई है, लेकिन मैं यह कैसे निर्धारित करूं कि कौन सा एजेंट या डेमन इसे शुरू कर रहा है, इसलिए मैं इसे अक्षम कर सकता हूं?

launchctl list | grep httpd ये परिणाम दिखाता है:

302 -   0x7f94ea700dd0.anonymous.httpd  
92  -   org.apache.httpd

मैं देखता हूं /System/Library/LaunchDaemons/org.apache.httpd.plistऔर यह निम्नलिखित दिखाता है। आप देख सकते हैं कि यह सेट है disabledlaunchdएक अजीब नाम के साथ अन्य आइटम एक फाइलसिस्टम खोज में दिखाई नहीं देता है, इसलिए मुझे नहीं पता कि यह क्या है।

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>XPC_SERVICES_UNAVAILABLE</key>
        <string>1</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>

मैंने ऑटोडेस्क से सीखा कि मैं इस प्रक्रिया को रोक सकता हूं /usr/sbin/apachectl stopलेकिन मुझे अभी भी नहीं पता कि हर रिबूट के बाद इसे कैसे निष्क्रिय किया जाए।
इलियट

(देर से टिप्पणी, मुझे पता है!) दो संभावित कारणों से इसे फिर से शुरू करने से लॉन्च करना बंद हो जाता है: (i) launchctl unload(हालांकि मुझे नहीं पता है कि क्या यह आपको पथ को निर्दिष्ट करने की आवश्यकता है), (ii) यदि यह आपके लॉगिन में है , सिस्टम वरीयताएँ उपकरण का उपयोग करें -> "उपयोगकर्ता और समूह" -> "लॉगिन आइटम" -> यदि पाया गया तो अपमानजनक प्रविष्टि हटाएं।
विवेक

जवाबों:


5

आप launchctl listपिड के लिए आउटपुट प्राप्त कर सकते हैं :

$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679   -   com.example.foo

फिर नाम की एक फ़ाइल के लिए उदाहरण देखने के लिए com.example.foo.plistमें ~/Library/LaunchAgents/, /Library/LaunchAgents/या /Library/LaunchDaemons/

संपादित करें: अक्षम कुंजी को ओवरराइड किया जा सकता है /var/db/launchd.db/com.apple.launchd/overrides.plist, जिसे launchctl load -wरूट के रूप में चलाने पर संशोधित किया जाता है, या /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plistजब launchctl load -wउपयोगकर्ता के रूप में चलाया जाता है, तो इसे संशोधित किया जाता है।

यदि OS X के साथ आने वाला Apache plist सक्षम था, तो आप इसे चलाकर निष्क्रिय कर सकते हैं sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist


मुझे PID मिला, फिर लॉन्चपार्ट किया गया लेकिन उस नंबर के साथ कुछ भी नहीं मिला।
इलियट

वास्तव में प्रयोग करके देखें sudo launchctl listlaunchctl listकेवल उपयोगकर्ता लॉन्च प्रक्रिया द्वारा लोड की गई नौकरियों को शामिल करना प्रतीत होता है।
लैरी

ठीक है कि समझ में आता है, धन्यवाद। लेकिन वास्तव में समस्या का समाधान नहीं हुआ ... मैंने प्रश्न में और विवरण जोड़ दिए।
इलियट

0

यह आपको संदर्भित सभी नौकरी परिभाषाओं की एक सूची देता है httpd

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/

अच्छा विचार है, लेकिन समस्या का समाधान नहीं हुआ। केवल एक परिणाम है, और यह अक्षम है। मैंने प्रश्न में और विवरण जोड़ दिए।
इलियट

1
सिर्फ इसलिए कि यह अक्षम है इसका मतलब यह नहीं है कि इसे शुरू नहीं किया गया है। Disabledकुंजी के द्वारा ओवरराइड किया जा सकता overrides.plistनीचे / में फाइल /var/db/launchd.db/। इसके अलावा एक अक्षम नौकरी अभी भी मैन्युअल रूप से हो सकती है (बूट / लॉगिन प्रक्रिया के दौरान स्वचालित रूप से नहीं)।
LCC

धन्यवाद, मुझे इसके बारे में पता नहीं था। मैंने कोशिश की grep -rn apache /private/var/db/launchd.dbऔर केवल एक परिणाम मिला। यह अक्षम है। मुझे यह पता लगाने की आवश्यकता है कि यह सेवा कैसे शुरू की जा रही है और इसे वास्तव में कैसे अक्षम किया जाए।
इलियट

0

लॉन्चर के व्यवहार में बदलाव आया है कि अगर किसी सेवा को जबरन सक्षम किया जाता है, तो यह स्रोत की सामग्री को संशोधित नहीं करेगा । लॉन्चर के लिए मैन पेज की जाँच करें, और "लोड" कमांड के तहत "-w" विकल्प। तो, फ़ाइल की जांच करना आवश्यक नहीं है कि आपको यह बताएगा कि इसकी अक्षमता है या नहीं। स्पष्ट रूप से इसके अक्षम नहीं :)

"लॉन्चक्टल अनलोड -w org.apache.httpd.plist" की कोशिश करें। यदि वह आपके लिए काम करता है, तो आप अभी भी इसे "लॉन्चक्टल स्टार्ट org.apache.httpd.plist" के साथ मांग पर शुरू कर पाएंगे

अगर वह काम नहीं करता है, तो "लॉन्चक्टल निकालें org.apache.httpd.plist" को आज़माएं जो आपको मैन्युअल रूप से शुरू नहीं होने देगा।


0

लेबल मान (उदाहरण org.apache.httpd) के आधार पर , आप .plistनिम्न कमांड का उपयोग कर पता लगाने की कोशिश कर सकते हैं :

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -print -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' | grep org.apache.httpd -A1

यह पता लगाने के लिए कि क्या प्रक्रिया शुरू हुई, इसके मूल पीआईडी ​​की जांच करें, जैसे

ps -f $(launchctl list | grep org.apache.httpd | grep -o '^[0-9]\+')

या pstreeपीआईडी ​​को मैन्युअल रूप से निर्दिष्ट करके कमांड का उपयोग करें , जैसे

pstree 92
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.