O Finder é um LaunchAgent, não um LaunchDaemon, o que significa que é carregado como parte de sua sessão de login. Use launchctl unload
sem sudo
ou apenas saia & de volta.
Eu tenho uma máquina na qual não quero que o localizador seja executado, então, inicialmente, tornei impossível sua execução:
sudo chmod -R a-x /System/Library/CoreServices/Finder.app
Mas, em seguida, percebi que o launchd ainda estava tentando lançar o localizador várias vezes a cada segundo, resultando em arquivos de log colossais, consistindo em milhões de linhas de:
com.apple.launchd.peruser.502[109] (com.apple.Finder[93799]) <Error>: posix_spawn("/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder", ...): Permission denied
com.apple.launchd.peruser.502[109] (com.apple.Finder[93799]) <Warning>: Exited with exit code: 1
Então eu editei /System/Library/LaunchAgents/com.apple.Finder.plist
para que ele não fosse mais lançado. O problema que tenho agora é forçar o launchd a recarregar o plist e, portanto, parar de tentar iniciar o finder. No entanto, não consigo reiniciar a máquina.
Eu tentei usar launchctl para remover e descarregar o processo, mas parece que não funciona:
$ sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.Finder.plist
launchctl: Error unloading: com.apple.Finder
$ sudo launchctl remove com.apple.Finder
launchctl remove error: No such process
Existe alguma maneira que eu possa parar o launchd continuamente tentando carregar o localizador sem reiniciar a máquina?
Seu log mostra que o Finder está sendo executado para o usuário 502, mas você está executando launchctl
com sudo
e o root não está executando um Finder. Experimente o launchctl unload
sem sudo
.
Como Gordon disse, você precisa executar o comando launchctl unload ...
no mesmo contexto de bootstrap do usuário. O launchctl em si tem uma facilidade para fazer isso via bsexec, você só precisa fornecer um PID de qualquer processo em execução nesse contexto de usuário, o Finder não está rodando, então escolha um diferente. O processo raiz relativo ao usuário é loginwindow console
, então isso faz mais sentido:
USERNAME=yourusername;export USERNAME; sudo launchctl bsexec "$(ps auxww | grep loginwindow\ console | grep "$USERNAME" | grep -v grep | awk '{print $2}')" sudo -u "$USERNAME" launchctl unload -wF /System/Library/LaunchAgents/com.apple.Finder.plist
substitua yourusername
pelo nome de usuário que você está afetando e voila.
System
Mac OS X, versão: 10.6.8 (Snow Leopard)
Tarefa
Eu queria proibir, principalmente a inicialização automática inicial, mas também o relançamento automático do Finder (como uma correção "simples" para descriptografar discos criptografados) antes que o Finder tentasse (e falhasse) carregar (e nesse processo descarte) é uma lista antiga (preferencial) de locais abertos anteriores ..
Confiabilidade
Eu raramente reinicio meu computador (e não tive muitas falhas com o Finder), então não consegui ver o efeito dessa configuração (que se parece mais com um hack) muitas vezes.
Eu também vejo agora que não fiz backup do original, por isso não consigo ver exatamente quais alterações eu fiz.
Procedimento
De qualquer forma, parece que o relançamento foi removido (como esperado) configurando <key>KeepAlive</key>
na lista de propriedades launchctl
(1) / launchd
(8) do Finder para <false/>
;
Mas, definir o <key>RunAtLoad</key>
(novamente, para <false/>
) parece não ter efeito (no Finder , já que provavelmente é iniciado ~ hardcoded ”).
Em uma nota lateral, posso dizer que criar um LaunchAgent - para / com qualquer outro aplicativo regular - com <key>RunAtLoad</key>
definido como <true/>
funciona muito bem se você, como eu, tiver um aplicativo (serviço de compartilhamento) falha frequentemente.
Referências
launchd.plist
(5) man
ual em Nota técnica da Apple # 2083 sobre o assunto (2011-12-28:" Última atualização: 2007-11-05 ") E um pequeno utilitário
Se eu puder recomendar uma aplicação gráfica para estas tarefas de configuração LaunchAgents
/ LaunchDaemons
que gostaria de promover (sem nenhuma afiliação, além de desenvolver a nacionalidade) Lingon (observe as diferentes versões (Snow) Leopard e Lion).
Finalmente
Desculpe pelo longo post sobre esta questão bastante trivial.
Espero que a maior parte disso ainda seja verdade na versão 10.7 Lion também. Embora o comportamento do Finder possa ser melhor (de alguma forma, sugestivamente não totalmente descartando locais inacessíveis) em linha com o recurso "Resume" Lion junto com "Auto Save".
Agora eu ainda tenho apenas uma outra pequena coisa de mac (tamanhos de arquivo) para comentar em unix.stackexchange ).
A mensagem de erro dada em alguns dos comentários:
Bug: launchctl.c:2325 (23930):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
mostra que launchctl
está tentando abrir um arquivo e falhando. Isso pode ser devido a permissões, mas isso parece improvável, dado o uso de sudo -u
. Muito mais provável é algo relacionado ao sinalizador O_EXLOCK
. Presumivelmente, launchd
bloqueia o banco de dados ao iniciar um trabalho, talvez para verificar se o trabalho está desativado e está tentando novamente o trabalho com tanta frequência que o arquivo de banco de dados é bloqueado na maioria das vezes.
A execução de um loop que tenta continuamente descarregar o trabalho deve entrar quando launchd
não tiver o arquivo bloqueado:
for ((i = 0; i < 100; i++))
do
echo -n "$i "
launchctl unload ... && break
done
Eu sei que descarregar um trabalho de ssh
normalmente funciona, porque eu fiz isso várias vezes, então acho que o problema deve ser devido à frequência do ciclo de falha / recarga.
Eu entendo o que você está tentando fazer, mas você está indo pelo caminho totalmente errado.
Use os Controles dos Pais para configurar uma conta restrita. Configure-o para usar o Simple Finder .