GNU/Linux >> Tutoriels Linux >  >> Linux

Écriture sur stdin du processus d'arrière-plan

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 &

Linux
  1. Comment mettre à niveau OpenSUSE 12.2 vers 12.3 (bureau et serveur)

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Comment systemd-tmpfiles nettoie /tmp/ ou /var/tmp (remplacement de tmpwatch) dans CentOS / RHEL 7

  4. Comment désactiver la suppression automatique des fichiers dans les répertoires /tmp et /var/tmp dans CentOS / RHEL 5,6

  5. Comment puis-je faire fonctionner mon serveur Web Golang en arrière-plan ?

Répertoire Linux tmp :tout ce que vous devez savoir

Comment redémarrer automatiquement un processus d'arrière-plan Linux en cas d'échec ?

Quelle est la différence entre /tmp et /run ?

echo ou print /dev/stdin /dev/stdout /dev/stderr

Comment changer /tmp par défaut en /home/user/tmp

Différence et utilisation correcte pour /tmp et /var/tmp