Daemoniza um processo no shell?

4

link dá um exemplo de daemonizing um processo no bash:

$ nohup firefox& &> /dev/null

Se eu for correto, o comando é o mesmo que "nohup e background a process". Mas não é um daemon mais do que um processo nohupped e background?

Quais etapas estão faltando aqui para daemonizar um processo?

Por exemplo, não está mudando o processo pai necessário ao daemonizing de um processo? Se sim, como você faz isso no bash? Ainda estou tentando entender uma resposta relacionada link .

Quais outras etapas e condições?

Veja minha pergunta relacionada link

    
por Tim 29.02.2016 / 18:41

2 respostas

7

Do artigo da Wikipedia sobre o daemon :

Em um ambiente Unix, o processo pai de um daemon é frequentemente, mas nem sempre, o processo init. Geralmente, um daemon é criado por um processo que bifurca um processo filho e, em seguida, sai imediatamente, fazendo com que o init adote o processo filho ou pelo processo init, ativando diretamente o daemon. Além disso, um daemon lançado por bifurcação e saída normalmente deve executar outras operações, como dissociar o processo de qualquer terminal de controle (tty). Esses procedimentos geralmente são implementados em várias rotinas de conveniência, como o daemon (3) no Unix.

Leia a manpage da função daemon .

A execução de um comando background a partir de um shell que sai imediatamente resulta em que o PPID do processo se torne 1. Fácil de testar:

# bash -c 'nohup sleep 10000 &>/dev/null & jobs -p %1'
1936
# ps -p 1936
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     1936       1    9104       9552  cons0       1009 17:28:12 /usr/bin/sleep

Como você pode ver, o processo é de propriedade do PID 1, mas ainda está associado a um TTY. Se eu sair desse shell de login, faça o login novamente e execute ps novamente, o TTY se tornará ? .

Leia aqui porque é importante destacar o TTY .

Usando setsid (parte de util-linux ):

# bash -c 'cd /; setsid sleep 10000 </dev/null &>/dev/null & jobs -p %1'
9864
# ps -p 9864
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     9864       1    9864       6632  ?           1009 17:40:35 /usr/bin/sleep

Acho que você nem precisa redirecionar stdin, stdout e stderr.

    
por 21.04.2016 / 18:37
0

Um deamon, por seu nome, nada mais é do que um programa que roda até 1. o sistema está desligado; 2. é solicitado que pare. Fora isso, não tem significado mágico.

Nas circunstâncias, executar um script bash em segundo plano com nohup, pode classificá-lo como um processo daemon.

O que você espera encontrar e não encontrar? Se você tiver algum problema, informe-os com o código de amostra e os segmentos de dados de amostra para solicitar mais ajuda. Sua pergunta, como está agora, é muito ampla / geral.

    
por 29.02.2016 / 18:54