Hangi başlatma aracısının veya arka plan programının bir işlem başlattığını bulma


11

Autodesk Smoke'i kurduktan sonra, sürekli çalışan iki httpd işlemim var ve bunları durdurmak istiyorum. Kullandığımda sudo killall httpddururlar ve hemen yeniden başlatılırlar. Etkinlik Monitörü, üst sürecin başlatıldığını gösterir, ancak devre dışı bırakabilmek için hangi aracı veya arka plan programının başlatıldığını nasıl belirleyebilirim?

launchctl list | grep httpd şu sonuçları gösterir:

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

İçeriye bakıyorum /System/Library/LaunchDaemons/org.apache.httpd.plistve aşağıdakileri gösteriyor. Olarak ayarlandığını görebilirsiniz disabled. launchdGarip bir ada sahip diğer öğe bir dosya sistemi aramasında görünmüyor, bu yüzden ne olduğu hakkında hiçbir fikrim yok.

<?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'ten işlemi durdurabileceğimi öğrendim, /usr/sbin/apachectl stopancak yine de her yeniden başlatmadan sonra nasıl devre dışı bırakılacağını bilmiyorum.
Elliott

(Geç yorum, biliyorum!) Launchd'un tekrar başlatılmasını durdurmak için iki olası ipucu: (i) launchctl unload(bunun plistin yolunu belirtmeniz gerekip gerekmediğini bilmiyorum), (ii) Giriş öğelerinizdeyse , Sistem Tercihleri ​​aracını kullanın -> "Kullanıcılar ve Gruplar" -> "Oturum Açma Öğeleri" -> Bulunduysa rahatsız edici girişi sil.
Vivek

Yanıtlar:


5

launchctl listPid için çıktısını grep edebilirsiniz :

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

Sonra adında bir dosya için örnek bir görünüm için com.example.foo.plistde ~/Library/LaunchAgents/, /Library/LaunchAgents/ya, /Library/LaunchDaemons/.

Düzenleme: Engelli anahtar geçersiz kılınabilir /var/db/launchd.db/com.apple.launchd/overrides.plist, ne zaman değiştirilir launchctl load -w, ya da kök olarak çalıştırılan /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plistzaman değiştirildiğinde, launchctl load -wkullanıcı olarak çalıştırılır.

OS X ile birlikte gelen Apache plist etkinleştirildiyse, çalıştırarak devre dışı bırakabilirsiniz sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


PID'yi aldım, sonra launchctl'i açtım ama bu numarayla hiçbir şey bulamadım.
Elliott

Aslında kullanmayı deneyin sudo launchctl list. launchctl listyalnızca kullanıcı başlatma işlemi tarafından yüklenen işleri içerir.
Lri

Tamam bu mantıklı, teşekkürler. Ama problemi gerçekten çözmedim ... Soruya daha fazla ayrıntı ekledim.
Elliott

0

Bu, atıfta bulunulan tüm iş tanımlarının bir listesini verir httpd.

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

İyi fikir, ama sorunu çözmedi. Sadece bir sonuç var ve devre dışı bırakıldı. Soruya daha fazla ayrıntı ekledim.
Elliott

1
Devre dışı bırakılması, başlatılmadığı anlamına gelmez. DisabledAnahtar tarafından geçersiz kılınan olabilir overrides.plistaşağıda / içindeki dosyaları /var/db/launchd.db/. Ayrıca devre dışı bırakılmış bir iş yine de elle başlatılabilir (önyükleme / oturum açma işlemi sırasında otomatik olarak değil).
LCC

Teşekkürler, bunu bilmiyordum. Denedim grep -rn apache /private/var/db/launchd.dbve sadece bir sonuç buldum. Devre dışı. Bu hizmetin nasıl başlatıldığını ve gerçekten nasıl devre dışı bırakılacağını bulmam gerekiyor.
Elliott

0

Launchctl davranışı bir hizmet zorla etkinse, bu edeceğini değişti değil kaynak .plist içeriğini değiştirmek, ancak (eğer değişiklik yapmamalıdır) ayrı bir dizin. Man sayfasında launchctl ve "load" komutu altındaki "-w" seçeneğini kontrol edin. Yani, sadece dosyayı incelemek gerekli olmadığını devre dışı olup olmadığını söylemek gerekmez. Açıkça devre dışı değil :)

"Launchctl unload -w org.apache.httpd.plist" komutunu deneyin. Bu sizin için işe yararsa, yine de "launchctl start org.apache.httpd.plist" ile istek üzerine başlatabilirsiniz.

Bu işe yaramazsa, elle başlatmanıza izin vermeyecek olan "launchctl remove org.apache.httpd.plist" komutunu deneyin.


0

Etiket değerine (örn. org.apache.httpd) Bağlı olarak .plist, aşağıdaki komutu kullanarak bulmayı deneyebilirsiniz :

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

İşlemi başlatan öğeyi bulmak için üst PID'lerini kontrol edin, örn.

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

Veya pstreePID'yi manuel olarak belirterek komutu kullanın , örn.

pstree 92
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.