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 followque 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 lesscomando (para parar tailing), de alguma forma, mata o servidor iniciado nohupno 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 ^Cno 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 ^Gpara substituir o comando de interrupção, mas, em seguida, ctrl+ gfez exatamente o que^Cestava 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 alesslinha entre parênteses (para torná-lo um subshell)executando o script em
xtermvez dekonsole
nohupimpede que o processo receba SIGHUPsinal enquanto CTRL + C envia SIGINTsinal. É por isso nohupque 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?