GNU/Linux >> Linux Esercitazione >  >> Linux

Scrittura nello stdin del processo in background

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 &

Linux
  1. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  2. Bash =~ Regex e HTTPS://regex101.com/?

  3. Come disabilitare l'eliminazione automatica dei file nelle directory /tmp e /var/tmp in CentOS / RHEL 5,6

  4. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

  5. I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?

Come aggiornare OpenSUSE 12.2 a 12.3 (desktop e server)

Directory Linux tmp:tutto ciò che devi sapere

Qual è la differenza tra /tmp e /run?

echo o print /dev/stdin /dev/stdout /dev/stderr

Come modificare /tmp predefinito in /home/user/tmp

Differenza e uso corretto per /tmp e /var/tmp