Eu não sabia se isso pertencia ao SO (como é um bug de codificação), mas pensei que vocês teriam mais conhecimento sobre as sutilezas do software usado (então talvez até o U&L possa ser considerado).
Aqui está o script de código mínimo (veja as edições para o script completo, há uma razão para eu fazer dessa maneira);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
O que ele tenta fazer é executar um servidor em segundo plano, que gera um arquivo de log.
Então eu follow
que arquivo de log usando less +F
. Ao sair, você deve pressionar ctrl+ cantes de pressionar Q.
O que acontece é que, quando eu ctrl+ cdentro do less
comando (para parar tailing
), de alguma forma, mata o servidor iniciado nohup
no topo! Nada mais é afetado. Eu posso shift+ fcomeçar a ajustar o log novamente (que não recebe novas informações desde que o servidor foi morto) e se eu clicar Qno restante do script, ele será executado normalmente.
Você sabe por que isso acontece? Como evitá-lo / outra coisa que eu deveria estar usando?
PS
O programa do servidor pode estar ouvindo um ^C
, que pode ser o problema; Existe algo que eu possa fazer para impedir isso? Por exemplo, quando apenas corro {SERVERCOMMAND}
por conta própria (de maneira bloqueadora), posso pressionar ctrl+ c, o que não mata imediatamente; ele imprime Received ^C signal, shutting down
(e depois se mata). Isto é o que está acontecendo quando eu ^C
no less
(A última Received ^C signal, shutting down
é gravado no log).
PPS
Eu tenho tentado várias coisas (nenhuma funcionou);
tentando desconectar o stdin do script alterando
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 & to nohup echo '' | {SERVERCOMMAND} > currentOutput.log 2>&1 & or nohup cat /dev/null/ | {SERVERCOMMAND} > currentOutput.log 2>&1 &
usando
stty intr ^G
para substituir o comando de interrupção, mas, em seguida, ctrl+ gfez exatamente o que^C
estava fazendo de qualquer maneira (de modo que este pode ser um problema com o meu emulador de terminal em vez;konsole
)colocando o
nohup
& / ou aless
linha entre parênteses (para torná-lo um subshell)executando o script em
xterm
vez dekonsole
nohup
impede que o processo receba SIGHUP
sinal enquanto CTRL + C envia SIGINT
sinal. É por isso nohup
que não tem o efeito que você esperava.
I think it is due to the handling within the database software, not on the shell
. Como um programa faria isso? Como, então, posso parar com isso?