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>

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.


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/

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.