Soluzione 1:
Potresti avviare il tuo server con una named pipe (fifo) come input:
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &
Il cat > /tmp/srv-input &
è importante per evitare che il tuo server riceva un EOF. Almeno un processo deve avere il fifo aperto per iscritto in modo che il tuo server non riceva un EOF. Il PID di questo comando viene salvato in /tmp/srv-input-cat-pid
file per quest'ultimo kill.
Nel tuo caso in cui hai già avviato il tuo server, devi usare un debugger come gdb
da allegare al tuo processo per reindirizzare il suo stdin
al fifo:
gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)
E poi fai qualcosa di simile al muggito per inviare l'input al tuo server (in un'altra finestra di terminale se necessario):
echo "command" > /tmp/srv-input
Per inviare un EOF al tuo server, devi terminare il cat > /tmp/srv-input
processo quale PID è stato salvato nel /tmp/srv-input-cat-pid file
.
Nel caso di GDB, esci da GDB e verrà inviato EOF.
Soluzione 2:
Potresti provare a scrivere nella sua directory /proc pid. Supponiamo che il pid dei tuoi demoni sia 2000, prova a scrivere in /proc/2000/fd/0
Soluzione 3:
Come sopra, ma 'cat' non ha funzionato per me. Il file ha ottenuto EOF ed è terminato dopo aver inviato un comando.
Questo ha funzionato per me:
#!/bin/bash
mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &