Bagaimana cara me-restart launchd OS X tanpa me-reboot?

14

Ketika saya menjalankan Zotero / Firefox, mereka sering macet dan saya ditinggalkan dengan proses zombie; setelah ini saya tidak bisa membuka contoh baru Zotero atau Firefox. Saya ingin menyingkirkan proses zombie ini daripada me-reboot, jadi untuk <pid>proses zombie,

$ ps -p <pid> -o ppid=

memberi saya <parent_pid>dan

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

memberitahu saya proses induk adalah /sbin/launchduntuk pengguna crippledlambda.

Apakah ada cara untuk me-restart ini tanpa mematikan sistem saya?

sudo kill -1 <parent_pid>

tidak melakukan apa-apa. Saya sudah mencoba menulis ini dalam skrip dan menjalankannya dengan 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

dan ini jelas (?) membuat saya dengan layar abu-abu tidak responsif jadi saya harus reboot. Terima kasih sebelumnya atas saran Anda.

hatmatrix
sumber
Mengapa Anda membunuh launchd bukannya proses sisa itu sendiri? launchd adalah bagian inti dari sesi pengguna; bahkan jika Anda dapat memulainya kembali, instance baru tidak akan menjadi induk dari semua proses lain yang bertanggung jawab untuk ... hal-hal seperti Finder, Dock, dll.
Gordon Davisson
@ Lordon, Anda tidak dapat membunuh proses zombie sehingga Anda harus mengejar orang tua, kecuali saya kehilangan sesuatu.
hatmatrix
Apakah mereka benar-benar zombie (yaitu proses yang telah keluar, tetapi status keluar siapa yang belum dibaca)? Jika ya, sesuatu yang jauh lebih dalam salah, karena launchdharus selalu membaca status keluar anak-anaknya segera. Jika mereka tidak benar-benar zombie, maka Anda harus membunuh mereka. Dalam kedua kasus itu, membunuh launchdakan menyebabkan lebih banyak masalah daripada menyelesaikannya.
Gordon Davisson

Jawaban:

17

Cara yang tepat untuk berhenti dan mulai menjalankan daemon adalah launchctl unload .

Sebagai contoh:

Anda dapat menghentikan layanan peluncuran daemon menggunakan membongkar subcommand dari launchctl .

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

Untuk memulai daemon peluncuran yang dinonaktifkan atau dihentikan:

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

★ Berhati-hatilah dengan menonaktifkan daemon peluncuran secara sembarangan - terutama yang resmi Apple; ini berpotensi membuat sistem Anda tidak dapat di-boot sampai Anda mulai dalam safe mode dan mengaktifkannya kembali secara manual. Anda tidak membunuh launchctl seperti proses normal karena berpotensi mematikan sistem Anda seperti yang Anda alami.

> info lebih lanjut tentang launchctl di sini . (Apple launchctl halaman manual)

Mena Ortega
sumber
Maaf ya com.apple.bsd.launchdadd.plist? Saya tidak melihat launchdpersis. Dan terima kasih atas peringatannya ...
hatmatrix
Untuk referensi di masa mendatang, perintah ini juga berfungsi scrun simctl spawn <sim_id> sudo launchctl unload …. File plist berada di bawah$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan
3

Dari halaman manual launchd:

Anda tidak dapat memanggil launchd secara langsung.

Oleh karena itu bahkan jika Anda bisa menghentikannya, Anda tidak akan dapat memulainya sehingga jawabannya adalah tidak ada cara.

ostergaard
sumber
1
Mengapa downvote? Posting saya dengan benar menjawab pertanyaan yang diajukan. Memang posting lain lebih konstruktif tetapi sebenarnya gagal menjawab pertanyaan aktual sesuai judul posting!
ostergaard
Posting lain menjawab pertanyaan.
DavidPostill
2
Tidak tidak, ia mengatakan bagaimana me-restart daemon tidak launchd sendiri.
ostergaard
3
lol - dan sikap itu, keakuratan itu tidak lagi penting, yang menjelaskan lambatnya penurunan kualitas pada SO. Selamat Tahun Baru!
ostergaard
1
Sayang sekali saya tidak bisa mengunggah komentar. Tidak hanya jawaban ini benar, jawaban yang lain juga gagal menjawab pertanyaan itu. Ini bukan tentang daemon yang dimulai oleh launchd, tetapi proses zombie diwarisi oleh launchd ketika proses yang tidak responsif dihentikan secara paksa. Saya memiliki masalah yang sama dan tidak ada daemon berdarah untuk dibunuh karena ini adalah browser yang memicu perilaku salah dalam launchd. Membalas dengan "apa pun" membuat darah saya mendidih sebagai orang yang sama yang telah menemukan jawaban yang berguna gagal untuk memahami pertanyaan di tempat pertama dan itu lebih buruk dengan urutan besarnya.
SaltwaterC