Non sapevo se questo appartenesse a SO (in quanto è un bug di codifica) ma pensavo che voi ragazzi sareste più informati riguardo alle sottigliezze del software utilizzato (quindi forse anche U&L potrebbero essere considerati).
Ecco lo script di codice minimo (vedi le modifiche per lo script completo, c'è una ragione per cui lo sto facendo in questo modo);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Ciò che tenta di fare è eseguire un server in background, che genera un file di registro.
Quindi ho followquel file di registro usando less +F. Mentre lo fai, per uscire da questo devi premere ctrl+ cprima di poter premere Q.
Quello che succede è che quando I ctrl+ call'interno del lesscomando (per fermarsi tailing) in qualche modo uccide il server iniziato con nohupin alto! Nient'altro è interessato. Posso shift+ fper ricominciare a seguire il registro (che non riceve nuove informazioni da quando il server viene ucciso) e se premo Qil resto dello script viene eseguito normalmente.
Sai perché questo accade? Come evitarlo / qualcos'altro che dovrei usare?
PS
Il programma server potrebbe essere in attesa di a ^C, che potrebbe essere il problema; c'è qualcosa che posso fare per fermarlo? Ad esempio, quando corro {SERVERCOMMAND}da solo (in modo bloccante), posso premere ctrl+ c, che non lo uccide immediatamente; stampa Received ^C signal, shutting down(e poi si uccide). Questo è ciò che sta accadendo quando ^Centro less(un finale Received ^C signal, shutting downè scritto nel registro).
PPS
Ho provato diverse cose (nessuna ha funzionato);
cercando di disconnettere lo stdin dallo script cambiando
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 ^Gper sostituire il comando di interruzione, ma poi ctrl+ ha gfatto esattamente quello che^Cstava facendo comunque (quindi potrebbe essere un problema con il mio emulatore di terminale;konsole)posizionando la
nohup& / o lalesslinea tra parentesi (per renderla una subshell)eseguendo lo script
xterminvece dikonsole
nohupimpedisce al processo di ricevere il SIGHUPsegnale mentre CTRL + C invia il SIGINTsegnale. Ecco perché nohupnon ha l'effetto che ti aspettavi.
I think it is due to the handling within the database software, not on the shell. Come farebbe un programma? Come potrei quindi fermarlo?