Launchd OS X'i yeniden başlatmadan nasıl yeniden başlatırım?


14

Zotero / Firefox'u çalıştırdığımda sık sık çöküyorlar ve zombi süreçleri ile kalıyorum; bundan sonra yeni Zotero veya Firefox örnekleri açamıyorum. Yeniden başlatmak yerine bu zombi süreçlerinden kurtulmak istiyorum, bu yüzden <pid>zombi süreci için,

$ ps -p <pid> -o ppid=

bana <parent_pid>ve

ps aux | awk -v PID=<parent_pid> '$2 == PID {print $0}'

üst sürecin /sbin/launchdkullanıcı için olduğunu söyler crippledlambda.

Sistemimi öldürmeden bunu yeniden başlatmanın bir yolu var mı?

sudo kill -1 <parent_pid>

hiç birşey yapmıyor. Ben bunu bir senaryoda yazmayı ve çalıştırmayı denedim sudo:

for i in `launchctl list | grep launchd | awk -v PID=<parent_pid> '$1==PID { print $NF }'`; do `launchctl stop $i && launchctl start $i` ; done

ve bu açıkçası (?) beni yanıt vermeyen gri bir ekranla bırakıyor, bu yüzden yine de yeniden başlatmam gerekiyor. Önerileriniz için şimdiden teşekkür ederiz.


Neden artık süreçlerin kendisi yerine fırlatma öldürüyorsun? launchd kullanıcı oturumunun temel bir parçasıdır; yeniden başlatabilseniz bile, yeni örnek sorumlu olduğu diğer tüm işlemlerin üst öğesi olmayacaktır ... Finder, Dock, vb. gibi şeyler
Gordon Davisson 21:13

@ Gordon, zombi süreçlerini öldüremezsin, bu yüzden bir şey eksik olmadıkça ebeveynin peşinden gitmelisin.
hatmatrix

Bunlar gerçek zombiler mi (yani çıkış yapan, ancak çıkış durumu okunmayan işlemler)? Eğer öyleyse, çok daha derin bir şey yanlıştır, çünkü launchdher zaman çocuklarının çıkış durumlarını hemen okumalıdır. Eğer gerçekten zombi değilse, o zaman onları öldürmelisiniz. Her iki durumda da, öldürmek launchdçözdüğünden daha fazla soruna yol açacaktır.
Gordon Davisson

Yanıtlar:


17

Başlatma cinlerini durdurmanın ve başlatmanın uygun yolu, launchctl unload .

Örneğin:

Launchctl'nin unload alt komutunu kullanarak bir başlatma arka plan hizmetini durdurabilirsiniz .

$ sudo launchctl unload /System/Library/LaunchDaemons/<daemon name>.plist

Devre dışı bırakılmış veya durdurulmuş bir başlatma arka plan programı başlatmak için:

$ sudo launchctl load /System/Library/LaunchDaemons/<daemon name>.plist

★ fırlatma cinlerini gelişigüzel bir şekilde devre dışı bırakmaya dikkat edin - özellikle resmi Apple olanlar; güvenli modda başlayıncaya ve sisteminizi manuel olarak yeniden etkinleştirene kadar sisteminizi önyükleme yapamayabilir. Bir launchctl'i normal bir süreç gibi öldürmezsiniz , çünkü sisteminizi yaşadığınız gibi öldürebilir .

> launchctl hakkında daha fazla bilgiyi burada bulabilirsiniz . (Apple launchctl kılavuz sayfası)


Üzgünüm, öyle com.apple.bsd.launchdadd.plistmi? launchdTam olarak görmüyorum . Ve uyarı için teşekkürler ...
hatmatrix

İleride başvurmak üzere bu komutlar da ile çalışır scrun simctl spawn <sim_id> sudo launchctl unload …. Plist dosyaları altında$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan

3

Launchd man sayfasından:

Launchd'u doğrudan çağıramazsınız.

Bu nedenle, durdurabilseniz bile, başlatamazsınız, bu yüzden cevap hiçbir yolu yoktur.


1
Neden inişli çıkışlı? Yayımım sorulan soruyu doğru cevaplıyor. Verilen diğer yazı daha yapıcıdır, ancak aslında asıl soruyu yazının başlığına göre cevaplayamaz!
ostergaard

Diğer yazı soruyu cevaplıyor.
DavidPostill

2
Hayır öyle değil, kendisi başlatılmayan cinlerin nasıl yeniden başlatılacağını söylüyor.
ostergaard

3
lol - ve bu tutum, doğruluk artık önemli değil, bu da SO'daki kalite düşüşünü açıklıyor. Yeni Yılınız mutlu olsun!
ostergaard

1
Yorumları kötü değerlendiremiyorum çok kötü. Sadece bu cevap doğru değil, diğer cevap gerçekten soruyu ele almıyor. Bu, fırlatma tarafından başlatılan cinlerle ilgili değil, yanıt vermeyen bir süreç zorla sonlandırıldığında fırlatma tarafından miras alınan zombi süreçleri ile ilgili. Ben aynı sorunu ve öldürmek için hiçbir kanlı daemon var çünkü bu launchd hatalı davranışı tetikleyen bir tarayıcı. "Ne olursa olsun" yanıtını vermek, yanıtı yararlı bulan kişilerle aynı şekilde kanı kaynatır.
SaltwaterC
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.