Como descobrir qual agente de ativação ou daemon está iniciando um processo

11

Depois de instalar o Autodesk Smoke, tenho dois processos httpd em execução o tempo todo e gostaria de interrompê-los. Quando uso sudo killall httpd, eles param e são reiniciados imediatamente. O Activity Monitor mostra que o processo pai foi iniciado, mas como determino qual agente ou daemon o está iniciando para poder desativá-lo?

launchctl list | grep httpd mostra estes resultados:

302 -   0x7f94ea700dd0.anonymous.httpd  
92  -   org.apache.httpd

Eu olho /System/Library/LaunchDaemons/org.apache.httpd.pliste mostra o seguinte. Você pode ver que está definido como disabled. O outro launchditem com um nome estranho não aparece em uma pesquisa no sistema de arquivos, então não tenho idéia do que é.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>XPC_SERVICES_UNAVAILABLE</key>
        <string>1</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>
Elliott
fonte
Aprendi com a Autodesk que posso interromper o processo, /usr/sbin/apachectl stopmas ainda não sei como desabilitá-lo após cada reinicialização.
Elliott
(Comentário tardio, eu sei!) Dois possíveis caminhos para impedir que o launchd o inicie novamente: (i) launchctl unload(embora eu não saiba se isso precisa que você especifique o caminho para o plist), (ii) Se estiver nos itens de login , use a ferramenta Preferências do sistema -> "Usuários e grupos" -> "Itens de login" -> Excluir entrada incorreta, se encontrada.
Vivek

Respostas:

5

Você pode grep a saída de launchctl listpara o pid:

$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679   -   com.example.foo

Então, por exemplo, olhar para um arquivo nomeado com.example.foo.plistem ~/Library/LaunchAgents/, /Library/LaunchAgents/ou /Library/LaunchDaemons/.

Editar: a chave Desabilitada pode ser substituída /var/db/launchd.db/com.apple.launchd/overrides.plist, modificada quando launchctl load -wexecutada como raiz, ou /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plistmodificada quando launchctl load -wexecutada como usuário.

Se o Apache plist que acompanha o OS X estiver ativado, você poderá desativá-lo executando sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.

Lri
fonte
Peguei o PID e depois iniciei o launchctl, mas não achei nada com esse número.
Elliott
Na verdade, tente usar sudo launchctl list. launchctl listapenas parece incluir trabalhos carregados pelo processo de inicialização do usuário.
Lri
OK, isso faz sentido, obrigado. Mas realmente não resolvi o problema ... Adicionei mais detalhes à pergunta.
Elliott
0

Isso fornece uma lista de todas as definições de trabalho referentes a httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
LCC
fonte
Boa ideia, mas não resolveu o problema. Há apenas um resultado e está desativado. Eu adicionei mais detalhes à pergunta.
Elliott
1
Só porque está desativado, não significa que não foi iniciado. A Disabledchave pode ser substituída pelos overrides.plistarquivos em / abaixo /var/db/launchd.db/. Além disso, um trabalho desabilitado ainda pode ser iniciado manualmente (não automaticamente durante o processo de inicialização / login).
LCC
Obrigado, eu não sabia disso. Eu tentei grep -rn apache /private/var/db/launchd.dbe encontrei apenas um resultado. Está desativado. Preciso descobrir como esse serviço está sendo iniciado e como realmente desabilitá-lo.
Elliott #
0

O comportamento do launchctl mudou porque, se um serviço for ativado à força, ele não modificará o conteúdo do arquivo .plist de origem, mas um diretório separado (que você não deve modificar). Verifique a página do manual quanto ao launchctl e a opção "-w" sob o comando "load". Portanto, basta examinar o arquivo e não será necessário informar se está desativado ou não. Claramente não está desativado :)

Tente "launchctl unload -w org.apache.httpd.plist". Se isso funcionar para você, você ainda poderá iniciá-lo sob demanda com "launchctl start org.apache.httpd.plist"

Se isso não funcionar, tente "launchctl remove org.apache.httpd.plist", que não permitirá que você inicie manualmente.

Chris Cogdon
fonte
0

Com base no valor do rótulo (por exemplo org.apache.httpd), você pode tentar encontrar .plisto seguinte comando:

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -print -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' | grep org.apache.httpd -A1

Para descobrir o que iniciou o processo, verifique os PIDs pai, por exemplo

ps -f $(launchctl list | grep org.apache.httpd | grep -o '^[0-9]\+')

Ou use o pstreecomando especificando o PID manualmente, por exemplo

pstree 92
kenorb
fonte