Removendo um processo de launchd sem reiniciar

2

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?

    
por DanielGibbs 06.07.2011 / 00:30

6 respostas

2

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.

    
por 06.07.2011 / 16:41
1

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 .

    
por 06.07.2011 / 05:51
1

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.

    
por 09.07.2011 / 08:10
1

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

  • file: ///System/Library/LaunchAgents/com.apple.Finder.plist
  • A lista de diretivas de lista de propriedades que eu estava procurando foi referenciada (apropriadamente) como a página 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 ).

    
por 28.12.2011 / 02:11
0

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.

    
por 11.07.2011 / 03:18
0

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 .

    
por 11.07.2011 / 03:36