http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ fornece um exemplo de daemonização de um processo no bash:
$ nohup firefox& &> /dev/null
Se eu estiver correto, o comando será o mesmo que "nohup e plano de fundo de um processo". Mas um daemon não é mais que um processo sem backup e em segundo plano?
Quais etapas estão faltando aqui para daemonize um processo?
Por exemplo, não é necessário alterar o processo pai ao daemonizar um processo? Se sim, como você faz isso no bash? Ainda estou tentando entender uma resposta relacionada https://unix.stackexchange.com/a/177361/674 .
Que outras etapas e condições?
Veja minha pergunta relacionada https://stackoverflow.com/q/35705451/156458
start-stop-daemon
Debian; Vou deixar aqui um thread relacionado do estouro de pilha stackoverflow.com/questions/16139940/… que é mais interessante do que a página de manual brutaRespostas:
No artigo da Wikipedia sobre daemon :
Em um ambiente Unix, o processo pai de um daemon é frequentemente, mas nem sempre, o processo init. Um daemon geralmente é criado por um processo que bifurca um processo filho e sai imediatamente, fazendo com que o init adote o processo filho ou pelo processo init que inicia diretamente o daemon. Além disso, um daemon iniciado pela bifurcação e pela saída normalmente deve executar outras operações, como dissociar o processo de qualquer terminal de controle (tty). Tais procedimentos são frequentemente implementados em várias rotinas de conveniência, como o daemon (3) no Unix.
Leia a página de manual da
daemon
função.A execução de um comando em segundo plano a partir de um shell que sai imediatamente resulta em 1. O PPID do processo se torna 1. Fácil de testar:
Como você pode ver, o processo pertence ao PID 1, mas ainda está associado a um TTY. Se eu sair desse shell de logon, efetue login novamente e faça
ps
novamente, o TTY se tornará?
.Leia aqui por que é importante desanexar do TTY .
Usando
setsid
(parte deutil-linux
):Eu acho que você nem precisa redirecionar stdin, stdout e stderr.
fonte
bash -c
wrapper, não haverá TTY associado ao processo. É realmente como ele demonstrou.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
, mostrará que é exatamente o mesmo TTY para ambos, mas o comportamento demonstrado de obter um TTY?
ainda acontece, mesmo que você nunca "saia do shell" nem feche o TTY.Um daemon, por seu nome, nada mais é do que um programa que é executado até 1. o sistema ser desligado; 2. é solicitado a parar. Fora isso, não tem significado mágico.
Nessas circunstâncias, a execução de 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ê estiver tendo problemas, indique-os com código de amostra e segmentos de dados de amostra para solicitar mais ajuda. Sua pergunta, como está agora, é muito ampla / geral.
fonte