วิธีค้นหาเอเจนต์เรียกใช้หรือ daemon ที่กำลังเริ่มต้นกระบวนการ


11

หลังจากติดตั้ง Autodesk Smoke ฉันมีกระบวนการ httpd สองกระบวนการที่ทำงานอยู่ตลอดเวลาและฉันต้องการหยุดกระบวนการเหล่านั้น เมื่อฉันใช้sudo killall httpdมันจะหยุดและรีสตาร์ททันที การตรวจสอบกิจกรรมแสดงให้เห็นว่ากระบวนการหลักคือ launchd แต่ฉันจะทราบได้อย่างไรว่าตัวแทนหรือ daemon เริ่มต้นทำงานเพื่อให้ฉันสามารถปิดใช้งานได้

launchctl list | grep httpd แสดงผลลัพธ์เหล่านี้:

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

ฉันมองเข้าไป/System/Library/LaunchDaemons/org.apache.httpd.plistและมันแสดงดังต่อไปนี้ disabledคุณสามารถเห็นมันตั้งค่าให้ launchdรายการอื่นที่มีชื่อแปลก ๆ จะไม่ปรากฏในการค้นหาระบบไฟล์ดังนั้นฉันจึงไม่รู้ว่ามันคืออะไร

<?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>

ฉันเรียนรู้จาก Autodesk ที่ฉันสามารถหยุดกระบวนการได้/usr/sbin/apachectl stopแต่ฉันก็ยังไม่รู้วิธีปิดใช้งานหลังจากรีบูตทุกครั้ง
เอลเลียต

(ความคิดเห็นล่าช้าฉันรู้!) โอกาสในการขายที่เป็นไปได้สองอย่างคือหยุดการเรียกใช้ Launchd อีกครั้ง: (i) launchctl unload(แม้ว่าฉันไม่ทราบว่าสิ่งนี้ต้องการให้คุณระบุเส้นทางไปยังรายการ) หรือไม่ (ii) หากอยู่ในชื่อล็อกอินของคุณ ใช้เครื่องมือการตั้งค่าระบบ -> "ผู้ใช้และกลุ่ม" -> "รายการเข้าสู่ระบบ" -> ลบรายการที่ละเมิดหากพบ
Vivek

คำตอบ:


5

คุณสามารถ grep ผลลัพธ์ของlaunchctl listสำหรับ pid:

$ 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มีการเรียกใช้ในฐานะผู้ใช้

หาก plist Apache ที่มาพร้อมกับ OS X sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plistถูกเปิดใช้งานคุณสามารถปิดการใช้งานโดยการทำงาน


ฉันได้รับ PID แล้วเปิดตัว grectctl แต่ไม่พบอะไรเลยกับหมายเลขนั้น
Elliott

ลองใช้sudo launchctl listดู launchctl listดูเหมือนว่าจะรวมงานที่โหลดโดยกระบวนการเรียกใช้งานของผู้ใช้
Lri

ตกลงที่เหมาะสมขอบคุณ แต่ไม่ได้แก้ปัญหาจริงๆ ... ฉันเพิ่มรายละเอียดให้กับคำถาม
เอลเลียต

0

httpdนี้จะช่วยให้คุณรายการของทุกคำจำกัดความของงานหมายถึง

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

ความคิดที่ดี แต่ไม่ได้แก้ปัญหา มีผลลัพธ์เดียวเท่านั้นและถูกปิดใช้งาน ฉันเพิ่มรายละเอียดเพิ่มเติมในคำถาม
Elliott

1
เพียงเพราะมันถูกปิดใช้งานไม่ได้หมายความว่ามันยังไม่ได้เริ่ม Disabledสำคัญอาจถูกแทนที่โดยไฟล์ในoverrides.plist / ด้านล่าง /var/db/launchd.db/นอกจากนี้งานที่ถูกปิดใช้งานอาจยังคงเป็นแบบแมนนวล (ไม่ใช่อัตโนมัติในระหว่างกระบวนการบูท / ล็อกอิน) เริ่มต้นขึ้น
LCC

ขอบคุณฉันไม่รู้เกี่ยวกับสิ่งนั้น ฉันพยายามgrep -rn apache /private/var/db/launchd.dbและพบผลลัพธ์เดียวเท่านั้น มันปิดการใช้งาน ฉันต้องทราบว่าบริการนี้เริ่มต้นอย่างไรและจะปิดการใช้งานอย่างไร
เอลเลียต

0

พฤติกรรมของ launchctl มีการเปลี่ยนแปลงในกรณีที่มีการเปิดใช้งานการบังคับใช้บริการมันจะไม่แก้ไขเนื้อหาของ. plist ต้นทาง แต่เป็นไดเรกทอรีแยกต่างหาก (ซึ่งคุณไม่ควรแก้ไข) ตรวจสอบหน้า man สำหรับ launchctl และตัวเลือก "-w" ภายใต้คำสั่ง "load" ดังนั้นเพียงตรวจสอบไฟล์ไม่จำเป็นต้องบอกคุณว่าไฟล์นั้นปิดการใช้งานหรือไม่ เห็นได้ชัดว่ามันไม่ได้ปิดการใช้งาน :)

ลอง "launchctl unload -w org.apache.httpd.plist" หากสิ่งนี้เหมาะกับคุณคุณจะยังสามารถเริ่มต้นได้ตามต้องการด้วย "launchctl start org.apache.httpd.plist"

หากไม่ได้ผลให้ลองใช้ "launchctl remove 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

หากต้องการค้นหาสิ่งที่เริ่มกระบวนการให้ตรวจสอบ PID แม่ของมันเช่น

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

หรือใช้pstreeคำสั่งโดยการระบุ PID ด้วยตนเองเช่น

pstree 92
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.