A partir da minha pergunta , ficou claro que não posso decidir facilmente os recursos de um daemon. Li em artigos diferentes e em fóruns diferentes que service --status-all
comandos podem ser usados para listar todos os daemons no meu sistema. Mas não acho que o comando esteja listando todos os daemons porque NetworkManager
, um daemon atualmente em execução no meu Ubuntu 14.04
sistema, não está listado pelo comando. Existe algum comando para listar os daemons em execução ou existe alguma maneira de encontrar os daemons por filesystem
si mesmo?
32
network-manager
nãoNetworkManager
.anacron
que é mencionado como não um daemon em seu script init.anacron
porque foi dito/etc/init.d/anacron
que não é um daemon. Meu objetivo é escrever umC++
programa para listar todos os daemons em execução no meu sistema. Para isso, preciso saber quais arquivos analisar para obter os detalhes.service --status-all
é disso que precisa. O Ubuntu parece tratar o NetworkManager de maneira diferente. Eu recebo ambosnetworking
enetwork-manager
na saída doservices --status-all
Debian, mas apenasnetworking
no Ubuntu. Eu acho que você precisa definir o que exatamente você quer dizer com "daemon".Respostas:
A noção de daemon é anexada a processos , não a arquivos . Por esse motivo, não faz sentido "encontrar daemons no sistema de arquivos". Apenas para deixar a noção um pouco mais clara: um programa é um arquivo executável (visível na saída de
ls
); um processo é uma instância desse programa (visível na saída deps
).Agora, se usarmos as informações que eu forneci em minha resposta , poderemos encontrar daemons em execução pesquisando processos executados sem um terminal de controle conectado a eles . Isso pode ser feito facilmente com
ps
:O
tty
campo de saída contém "?" quando o processo não possui terminal de controle.O grande problema ocorre quando o sistema executa um ambiente gráfico. Como os programas da GUI (por exemplo, Chromium) não estão conectados a um terminal, eles também aparecem na saída. Em um sistema padrão, onde o root não executa programas gráficos, você pode simplesmente restringir a lista anterior aos processos do root. Isso pode ser conseguido usando
ps
o-U
interruptor ' .No entanto, dois problemas surgem aqui:
Basicamente, gostaríamos de exibir todos os programas sem um terminal de controle, mas não os programas da GUI . Felizmente para nós, não é um programa para processos lista GUI:
xlsclients
! Esta resposta do slm nos diz como usá-lo para listar todos os programas da GUI, mas teremos que revertê-lo, pois queremos excluí-los. Isso pode ser feito usando o--deselect
switch.Primeiro, criaremos uma lista de todos os programas GUI para os quais temos processos em execução. A partir da resposta que acabei de vincular, isso é feito usando ...
Agora,
ps
possui uma-C
opção que nos permite selecionar pelo nome do comando. Acabamos de receber nossa lista de comandos, então vamos injetá-la naps
linha de comando. Observe que eu estou usando--deselect
depois para reverter minha seleção.Agora, temos uma lista de todos os processos que não são da GUI. Não vamos esquecer nossa regra de "não anexar TTY". Para isso, adicionarei
-o tty,args
à linha anterior para gerar o resultadotty
de cada processo (e sua linha de comando completa):O final
grep
captura todas as linhas que começam com "?", Ou seja, todos os processos sem um controle tty. E lá vai você! Essa linha final fornece todos os processos que não são da GUI em execução sem um terminal de controle. Observe que você ainda pode melhorá-lo, por exemplo, excluindo threads do kernel (que não são processos) ...... ou adicionando algumas colunas de informações para você ler:
fonte
Escrevi para o "antigo" sysv initd, você deve verificar se está funcionando na sua distribuição.
Bons demônios têm scripts de inicialização bem escritos em / etc / initd
Ao alterar o nível de execução, como o init conhece os daemons em execução?
Ele procura seus nomes no diretório
Então você pode
Para verificar todos os processos: liste todos os subdiretórios em
Se o nome tiver dígitos, é o pid de um processo em execução.
Por exemplo, o status do processo com o pid 1234 é este arquivo
Abra-o e obtenha a primeira linha, começa com "Nome:"
Vejo
(desculpe pela formatação desagradável, estou escrevendo no meu celular ...)
fonte