Quando você vê [1] + 7766 Suspended (signal) ...
, esta é uma mensagem impressa pelo shell, informando que um de seus processos filhos foi suspenso.
No exemplo fff
, há dois processos de shell a serem considerados. Seu shell interativo inicial e o script de shell que é executado como um processo filho.
Seu script organiza a suspensão de si mesmo. A mensagem "Suspenso" é impressa pelo shell interativo. Portanto, esta não é uma opção que você pode ativar ou desativar dentro do script .
Além disso, não há nenhuma opção que você possa definir no shell interativo para ativar ou desativar essa mensagem específica. Não é possível "suprimir" esta mensagem individualmente ... basicamente porque isso nunca é o que você quer fazer: -).
Acho que o script fff
não é retomado com sucesso mesmo. Eu acho que pode ser possível modificá-lo para fazer isso. No entanto, retomar a si mesmo é uma ideia terrível. Quando você suspende o script, o shell interativo mostra seu prompt de comando novamente. Ou seja Se você não viu a mensagem "suspenso", parece que seu script terminou. Mas de qualquer forma, se o seu script conseguisse retomar a si mesmo, ele tentaria roubar o controle do terminal do usuário, independentemente do que ele tivesse começado a fazer nesse meio tempo. Isso não é bom!
Acho que você precisa entender, por exemplo que se você iniciou um processo a partir do seu terminal e é um processo filho do seu shell interativo , então não é um processo daemon .
Para iniciar um daemon do seu terminal, o programa deve ser fork () durante a inicialização. O processo original deve sair, e isso permite que o processo continue a ser reexaminado , e. (no unix tradicional) para PID 1 a.k.a. o processo init
. E há mais etapas que ele deve incluir também para se desconectar do terminal. Veja por exemplo aqui: Daemonize um processo em shell?
Além disso, se o seu sistema usa systemd
, você precisa entender que os scripts herdados de /etc/init.d/
precisam ser iniciados usando systemctl start
. Os scripts init.d
empacotados no Debian e em outros lugares incluem um hack de compatibilidade que faz isso para você. Mas você deve não usar esse recurso. É uma receita para confusão. O script que você escreveu não tem esse recurso, então você deve usar systemctl start fff
.
É altamente recomendável não tentar usar os jogos no script fff
em combinação com systemctl start
.
Na realidade, systemctl
usa uma abordagem diferente para iniciar processos de serviço em segundo plano. Ele envia uma mensagem para o PID 1 (o processo systemd
init) e o PID 1 inicia o programa solicitado. Se você definir um serviço systemd nativo, o programa não precisará se daemonizar sozinho. Se você usar um script init.d
herdado, o programa ainda precisará ser desmembrado, mas a única coisa que ele conseguirá é informar systemd
de que o script init.d
terminou de ser iniciado. (Isso torna possível notar algumas falhas de inicialização nos daemons, embora, infelizmente, muitos programas existentes tenham falhas de inicialização que podem acontecer após a etapa de daemonização).
Você não quer se preocupar se e como systemd
reagirá ao script init.d
parar e retomar a si mesmo.