No sabía si esto pertenecía a SO (ya que es un error de codificación), pero pensé que ustedes tendrían más conocimiento sobre las sutilezas del software utilizado (por lo que tal vez incluso U&L podría considerarse).
Aquí está el script de código mínimo (vea las ediciones para el script completo, hay una razón por la que lo estoy haciendo de esta manera);
#/bin/bash
nohup {SERVERCOMMAND} > currentOutput.log 2>&1 &
less +F currentOutput.log
Lo que intenta hacer es ejecutar un servidor en segundo plano, que sale a un archivo de registro.
Luego uso followese archivo de registro less +F. Mientras lo haces, para salir de esto debes presionar ctrl+ cantes de poder golpear Q.
Lo que sucede es que cuando I ctrl+ cdentro del lesscomando (detener tailing) de alguna manera mata al servidor que comenzó nohupen la parte superior. Nada más se ve afectado. Puedo shift+ fpara comenzar a seguir el registro nuevamente (que no obtiene información nueva ya que se mata el servidor) y si presiono Qel resto del script se ejecuta normalmente.
¿Sabes por que pasa esto? ¿Cómo evitarlo / algo más que debería estar usando?
PD
El programa del servidor puede estar escuchando a ^C, que puede ser el problema; ¿Hay algo que pueda hacer para detener eso? Al igual que cuando solo corro {SERVERCOMMAND}por sí solo (de manera bloqueante), puedo presionar ctrl+ c, que no lo mata de inmediato; se imprime Received ^C signal, shutting down(y luego se suicida). Esto es lo que sucede cuando ^Cen less(Un último Received ^C signal, shutting downse escribe en el registro).
PPS
He estado probando varias cosas (ninguna funcionó);
tratando de desconectar el stdin del 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 &utilizando
stty intr ^Gpara reemplazar el comando de interrupción, pero luego ctrl+ ghizo exactamente lo que^Cestaba haciendo de todos modos (por lo que este puede ser un problema con mi emulador de terminal en su lugar;konsole)colocando la
nohupy / o lalesslínea entre paréntesis (para que sea una subshell)ejecutando el script en
xtermlugar dekonsole
nohupevita que el proceso reciba SIGHUPseñal mientras que CTRL + C envía SIGINTseñal. Por eso nohupno tiene el efecto que esperabas.
I think it is due to the handling within the database software, not on the shell. ¿Cómo haría un programa esto? ¿Cómo, entonces, podría detenerlo?