Daemon || Diferenças de controle de processo

0

Com relação a este excelente post:

link

Gostaria de perguntar o seguinte:

Depois de lançar um aplicativo do meu terminal, o aplicativo continua sendo executado em segundo plano ou em primeiro plano e a única coisa que posso fazer para interagir com ele é enviando sinais do meu terminal (dado que stdin ainda está em vigor) .

No entanto, depois que um processo de daemon é iniciado, percebi que ele pode ser controlado com meios extras (além dos sinais), como consultá-lo com sinalizadores como abaixo (arco):

# /etc/rc.d/daemon-name {start|stop|restart|status|...}

Alguém poderia me explicar se esse recurso está embutido na "estrutura daemon" geral e se aplica a cada processo daemon como um recurso especial ou é apenas uma provisão que processos projetados para executar como um daemon precisa lidar internamente ?

E para adicionar mais à questão, como na terra somos capazes de "controlar" daemons do terminal usando o seu nome (ou seja, sambad stop), enquanto as aplicações sempre devem ser encaminhadas usando seu nome (ou seja, kill -9 12345) ?

Obrigado antecipadamente!

    
por kstratis 29.07.2012 / 00:20

2 respostas

1

Se eu entendi a pergunta corretamente, quando você está usando o sambad stop, ele também é indicado pelo número do PID, que está armazenado no diretório / var / run / (ou outro, dependendo do seu sistema). O arquivo é criado quando você faz start .

Este recurso não está embutido nesse deamon. Se você editar /etc/rc.d/daemon-name, você pode ver que é um script bash simples, que executa o processo com parâmetros especificados (argumentos podem ser definidos naquele script no Linux, ou em /etc/rc.conf em Unix). Você pode escrever seu próprio script para iniciar e parar o nome do daemon.

Basicamente:

  • start executa o processo a partir do terminal (o processo sabe automaticamente que deve ser executado em segundo plano, às vezes há um argumento especial para isso como -d),
  • pare fazendo kill -9 cat /var/run/daemon.pid ,
  • reiniciar está fazendo kill -HUP cat /var/run/daemon.pid ,
  • status está fazendo algo como: ps cat /var/run/daemon.pid .

Também existem diferentes métodos de comunicação do que enviar os sinais usando sockets unix. Por exemplo, você pode controlar os processos enviando dbus messages. Veja: man dbus-send

O comando a seguir listará todos os seus soquetes unix:

netstat -lp --unix

Você pode filtrá-lo pelo dbus:

netstat -lp --unix | grep -w dbus

Ao executar dbus-monitor , você pode ver como diferentes processos podem se comunicar entre si.

Aqui está um exemplo de envio da mensagem para outro serviço:

dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames

Leia alguns artigos úteis:

por 29.07.2012 / 03:40
1

A maior parte da funcionalidade não está embutida no daemon, mas nos scripts de init . Em /etc/init.d/sambad haverá código para rastrear o PID quando ele for iniciado e sinalizá-lo quando precisar parar. Os scripts init são geralmente mais específicos para a distribuição do que para o daemon em questão, pois a inicialização do sistema e a administração de serviços é uma das principais áreas que as distribuições Linux usam para se distinguirem.

A capacidade de recarregar um arquivo de configuração sem matar e relançar o daemon é a única dessas ações que precisa de uma quantidade significativa de código gravada dentro do próprio daemon.

    
por 29.07.2012 / 04:16