Solution 1 :
Vous pouvez démarrer votre serveur avec un tube nommé (fifo) en entrée :
mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &
Le cat > /tmp/srv-input &
est important pour éviter que votre serveur ne reçoive un EOF. Au moins un processus doit avoir le fifo ouvert en écriture afin que votre serveur ne reçoive pas d'EOF. Le PID de cette commande est enregistré dans le /tmp/srv-input-cat-pid
fichier pour ce dernier kill.
Dans votre cas où vous avez déjà démarré votre serveur, vous devez utiliser un débogueur tel que gdb
à joindre à votre processus pour rediriger son stdin
au fifo :
gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)
Et puis faites quelque chose comme ci-dessous pour envoyer l'entrée à votre serveur (dans une autre fenêtre de terminal si nécessaire) :
echo "command" > /tmp/srv-input
Pour envoyer un EOF à votre serveur, vous devez tuer le cat > /tmp/srv-input
traiter quel PID a été enregistré dans le /tmp/srv-input-cat-pid file
.
Dans le cas de GDB, quittez simplement GDB et EOF sera envoyé.
Solution 2 :
Vous pouvez essayer d'écrire dans son répertoire /proc pid. Disons que le pid de vos démons est 2000, essayez d'écrire dans /proc/2000/fd/0
Solution 3 :
Comme ci-dessus, mais 'cat' n'a pas fonctionné pour moi. Le fichier a obtenu EOF et s'est terminé après l'envoi d'une commande.
Cela a fonctionné pour moi :
#!/bin/bash
mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &