Řešení 1:
Můžete spustit server s pojmenovaným kanálem (fifo) jako jeho vstupem:
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &
cat > /tmp/srv-input &
je důležité zabránit tomu, aby váš server obdržel EOF. Alespoň jeden proces musí mít fifo otevřené písemně, aby váš server neobdržel EOF. PID tohoto příkazu je uložen v /tmp/srv-input-cat-pid
soubor pro poslední zabití.
Ve vašem případě, kdy jste již spustili svůj server, musíte použít debugger, například gdb
připojit k vašemu procesu a přesměrovat jeho stdin
k fifo:
gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)
A pak proveďte něco jako níže pro odeslání vstupu na váš server (v případě potřeby v jiném okně terminálu):
echo "command" > /tmp/srv-input
Chcete-li poslat EOF na váš server, musíte zabít cat > /tmp/srv-input
proces, který PID byl uložen do /tmp/srv-input-cat-pid file
.
V případě GDB stačí GDB opustit a EOF bude odesláno.
Řešení 2:
Můžete zkusit zapisovat do jeho adresáře /proc pid. Řekněme, že pid vašich démonů je 2000, zkuste napsat do /proc/2000/fd/0
Řešení 3:
Totéž jako výše, ale 'cat' mi nefungovalo. Soubor dostal EOF a skončil po odeslání jednoho příkazu.
Toto fungovalo pro mě:
#!/bin/bash
mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &