Solución 1:
Podría iniciar su servidor con una canalización con nombre (fifo) como entrada:
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &
El cat > /tmp/srv-input &
es importante evitar que su servidor reciba un EOF. Al menos un proceso debe tener el fifo abierto por escrito para que su servidor no reciba un EOF. El PID de este comando se guarda en el /tmp/srv-input-cat-pid
archivo para la última muerte.
En su caso, donde ya inició su servidor, debe usar un depurador como gdb
para adjuntar a su proceso para redirigir su stdin
al fifo:
gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)
Y luego haga algo como a continuación para enviar la entrada a su servidor (en otra ventana de terminal si es necesario):
echo "command" > /tmp/srv-input
Para enviar un EOF a su servidor, debe eliminar el cat > /tmp/srv-input
proceso cuyo PID se ha guardado en el /tmp/srv-input-cat-pid file
.
En el caso de GDB, simplemente salga de GDB y se enviará EOF.
Solución 2:
Podría intentar escribir en su directorio /proc pid. Digamos que el pid de sus demonios es 2000, intente escribir en /proc/2000/fd/0
Solución 3:
Igual que arriba, pero 'gato' no funcionó para mí. El archivo obtuvo EOF y finalizó después de enviar un comando.
Esto funcionó para mí:
#!/bin/bash
mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &