Cara mengetahui agen peluncuran atau daemon apa yang memulai proses


11

Setelah menginstal Autodesk Smoke, saya memiliki dua proses httpd yang berjalan sepanjang waktu, dan saya ingin menghentikannya. Ketika saya gunakan sudo killall httpd, mereka berhenti dan segera dimulai kembali. Activity Monitor menunjukkan bahwa proses induk launchd, tetapi bagaimana cara menentukan agen atau daemon mana yang memulai sehingga saya dapat menonaktifkannya?

launchctl list | grep httpd menunjukkan hasil ini:

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

Saya melihat /System/Library/LaunchDaemons/org.apache.httpd.plistdan menunjukkan berikut ini. Anda dapat melihatnya diatur ke disabled. launchdItem lain dengan nama aneh tidak muncul dalam pencarian sistem file, jadi saya tidak tahu apa itu.

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

Saya belajar dari Autodesk bahwa saya dapat menghentikan proses dengan /usr/sbin/apachectl stoptetapi saya masih tidak tahu cara menonaktifkannya setelah setiap reboot.
Elliott

(Komentar terlambat, saya tahu!) Dua kemungkinan mengarah untuk menghentikan launchd dari memulainya lagi: (i) launchctl unload(walaupun saya tidak tahu apakah ini perlu Anda menentukan path ke plist), (ii) Jika ada di dalam loginitem Anda , gunakan alat System Preferences -> "Users and Groups" -> "Item Login" -> Hapus entri yang menyinggung jika ditemukan.
Vivek

Jawaban:


5

Anda dapat menerima output launchctl listuntuk pid:

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

Kemudian misalnya mencari file bernama com.example.foo.plistdalam ~/Library/LaunchAgents/, /Library/LaunchAgents/atau /Library/LaunchDaemons/.

Sunting: kunci Dinonaktifkan dapat ditimpa /var/db/launchd.db/com.apple.launchd/overrides.plist, yang dimodifikasi ketika launchctl load -wdijalankan sebagai root, atau di /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, yang dimodifikasi ketika launchctl load -wdijalankan sebagai pengguna.

Jika plist Apache yang datang dengan OS X diaktifkan, Anda dapat menonaktifkannya dengan menjalankan sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


Saya mendapatkan PID, lalu mengambil launchctl tetapi tidak menemukan apa pun dengan nomor itu.
Elliott

Sebenarnya coba gunakan sudo launchctl list. launchctl listsepertinya hanya mencakup pekerjaan yang dimuat oleh proses launchd pengguna.
Lri

OK itu masuk akal, terima kasih. Tetapi tidak benar-benar menyelesaikan masalah ... Saya menambahkan lebih banyak detail pada pertanyaan.
Elliott

0

Ini memberi Anda daftar semua definisi pekerjaan yang dirujuk httpd.

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

Ide bagus, tapi tidak menyelesaikan masalah. Hanya ada satu hasil, dan itu dinonaktifkan. Saya menambahkan rincian lebih lanjut ke pertanyaan.
Elliott

1
Hanya karena dinonaktifkan tidak berarti belum dimulai. The Disabledkey mungkin ditimpa oleh overrides.plistfile dalam / di bawah /var/db/launchd.db/. Selain itu, pekerjaan yang dinonaktifkan mungkin masih dilakukan secara manual (tidak secara otomatis selama proses boot / login) dimulai.
LCC

Terima kasih, saya tidak tahu tentang itu. Saya mencoba grep -rn apache /private/var/db/launchd.dbdan hanya menemukan satu hasil. Ini dinonaktifkan. Saya perlu mencari tahu bagaimana layanan ini sedang dimulai dan bagaimana cara menonaktifkannya.
Elliott

0

Perilaku launchctl telah berubah karena jika suatu layanan diaktifkan secara paksa, ia tidak akan mengubah konten source .plist, tetapi direktori terpisah (yang tidak boleh Anda modifikasi). Periksa halaman manual untuk launchctl, dan opsi "-w" di bawah perintah "load". Jadi, hanya memeriksa file tidak perlu memberi tahu Anda apakah itu dinonaktifkan atau tidak. Jelas tidak dinonaktifkan :)

Coba "launchctl unload -w org.apache.httpd.plist". Jika itu berhasil untuk Anda, maka Anda masih dapat memulainya sesuai permintaan dengan "launchctl start org.apache.httpd.plist"

Jika itu tidak berhasil, coba "launchctl remove org.apache.httpd.plist" yang tidak akan membiarkan Anda memulai secara manual.


0

Berdasarkan nilai label (misalnya org.apache.httpd), Anda dapat mencoba menemukan .plistmenggunakan perintah berikut:

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

Untuk menemukan apa yang memulai proses, periksa PID induknya, mis

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

Atau gunakan pstreeperintah dengan menentukan PID secara manual, mis

pstree 92
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.