Como reiniciar o launchd OS X sem reiniciar?

14

Quando executo o Zotero / Firefox, eles costumam travar e eu fico com processos de zumbis; depois disso, não consigo abrir novas instâncias do Zotero ou Firefox. Eu quero me livrar desses processos zumbis em vez de reiniciar. Portanto, para <pid>o processo zumbi,

$ ps -p <pid> -o ppid=

dá-me o <parent_pid>e

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

diz-me que o processo pai é /sbin/launchdpara o usuário crippledlambda.

Existe uma maneira de reiniciar isso sem matar meu sistema?

sudo kill -1 <parent_pid>

faz nada. Eu tentei escrever isso em um script e executá-lo com 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

e isso obviamente (?) me deixa com uma tela cinza que não responde, então eu tenho que reiniciar de qualquer maneira. Agradecemos antecipadamente por suas sugestões.

hatmatrix
fonte
Por que você está matando o launchd em vez dos próprios processos restantes? launchd é uma parte essencial da sessão do usuário; mesmo se você pode reiniciá-lo, a nova instância não seria o pai de todos os outros processos é responsável por ... coisas como o Finder, Dock, etc.
Gordon Davisson
@Gordon, você não pode matar processos zumbis, então você tem que ir atrás dos pais, a menos que eu esteja perdendo alguma coisa.
hatmatrix
Eles são zumbis verdadeiros (ou seja, processos que foram encerrados, mas cujo status de saída não foi lido)? Se estiverem, algo muito mais profundo está errado, pois launchdsempre deve ler imediatamente o status de saída de seus filhos. Se eles não são verdadeiramente zumbis, você deve matá-los. Em qualquer um dos casos, matar launchdvai causar mais problemas do que resolve.
Gordon Davisson

Respostas:

17

A maneira correta de parar e iniciar daemons de inicialização é o launchctl unload .

Por exemplo:

É possível parar um serviço de daemon de ativação usando o subcomando unload de launchctl .

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

Para iniciar um daemon de inicialização desabilitado ou parado:

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

★ Tenha cuidado ao desativar os daemons de inicialização ao acaso - especialmente os da Apple oficiais; ele pode potencialmente tornar seu sistema não inicializável até você iniciar no modo de segurança e reativá-los manualmente. Você não mata um launchctl como um processo normal porque ele pode potencialmente matar seu sistema como você experimentou.

> mais informações sobre o launchctl aqui . (Página de manual do launchctl da Apple)

Mena Ortega
fonte
Desculpe, é isso com.apple.bsd.launchdadd.plist? Eu não vejo launchdexatamente. E obrigado pelo aviso ...
hatmatrix
Para referência futura, esses comandos também funcionam scrun simctl spawn <sim_id> sudo launchctl unload …. Os arquivos plist estão sob$(xcode-select -p)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/LaunchDaemons/
Leo Natan
3

Na página do manual launchd:

Você não pode chamar o launchd diretamente.

Portanto, mesmo que você pudesse pará-lo, não seria capaz de iniciá-lo, então a resposta é que não há como.

ostergaard
fonte
1
Por que o voto negativo? Minha postagem responde corretamente à pergunta. Concedido que o outro post é mais construtivo, mas na verdade não responde à pergunta real de acordo com o título do post!
Ostergaard 01/01
O outro post responde à pergunta.
DavidPostill
2
Não, não, ele diz como reiniciar os daemons e não o launchd.
Ostergaard 01/01
3
lol - e é essa atitude, que a precisão não importa mais, que explica o lento declínio na qualidade do SO. Feliz Ano Novo!
Ostergaard
1
Pena que não posso diminuir os comentários. Não apenas esta resposta está correta, a outra resposta falha em realmente abordar a questão. Não se trata de daemons iniciados pelo launchd, mas de processos zumbis herdados pelo launchd quando um processo que não responde é forçado a terminar. Eu tenho o mesmo problema e nenhum daemon sangrento para matar, pois é um navegador que aciona o comportamento defeituoso no launchd. Responder com "tanto faz" faz meu sangue ferver, pois as mesmas pessoas que acharam a resposta útil não conseguem entender a pergunta em primeiro lugar, e isso é pior por uma ordem de magnitude.
SaltwaterC