Lösung 1:
Sie könnten Ihren Server mit einer Named Pipe (fifo) als Eingabe starten:
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &
Der cat > /tmp/srv-input &
ist wichtig, um zu vermeiden, dass Ihr Server ein EOF empfängt. Mindestens ein Prozess muss das Fifo schriftlich geöffnet haben, damit Ihr Server kein EOF erhält. Die PID dieses Befehls wird in /tmp/srv-input-cat-pid
gespeichert Datei für letzteren Kill.
In Ihrem Fall, in dem Sie Ihren Server bereits gestartet haben, müssen Sie einen Debugger wie gdb
verwenden an Ihren Prozess anzuhängen, um dessen stdin
umzuleiten zum fifo:
gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)
Und tun Sie dann so etwas wie unten, um Eingaben an Ihren Server zu senden (falls erforderlich in einem anderen Terminalfenster):
echo "command" > /tmp/srv-input
Um ein EOF an Ihren Server zu senden, müssen Sie cat > /tmp/srv-input
beenden verarbeiten, welche PID im /tmp/srv-input-cat-pid file
gespeichert wurde .
Im Fall von GDB beenden Sie einfach GDB und EOF wird gesendet.
Lösung 2:
Sie könnten versuchen, in das PID-Verzeichnis /proc zu schreiben. Angenommen, die PID Ihres Daemons ist 2000, versuchen Sie, nach /proc/2000/fd/0
zu schreibenLösung 3:
Dasselbe wie oben, aber 'cat' hat bei mir nicht funktioniert. Die Datei wurde EOF und endete nach dem Senden eines Befehls.
Das hat bei mir funktioniert:
#!/bin/bash
mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &