GNU/Linux >> Tutoriales Linux >  >> Linux

Escribir en la entrada estándar del proceso en segundo plano

Solución 1:

Podría iniciar su servidor con una canalización con nombre (fifo) como entrada:

mkfifo /tmp/srv-input
cat > /tmp/srv-input &
echo $! > /tmp/srv-input-cat-pid
cat /tmp/srv-input | myserver &

El cat > /tmp/srv-input & es importante evitar que su servidor reciba un EOF. Al menos un proceso debe tener el fifo abierto por escrito para que su servidor no reciba un EOF. El PID de este comando se guarda en el /tmp/srv-input-cat-pid archivo para la última muerte.

En su caso, donde ya inició su servidor, debe usar un depurador como gdb para adjuntar a su proceso para redirigir su stdin al fifo:

gdb -p PID
call close(0)
call open(0, "/tmp/srv-input", 0600)

Y luego haga algo como a continuación para enviar la entrada a su servidor (en otra ventana de terminal si es necesario):

echo "command" > /tmp/srv-input

Para enviar un EOF a su servidor, debe eliminar el cat > /tmp/srv-input proceso cuyo PID se ha guardado en el /tmp/srv-input-cat-pid file .

En el caso de GDB, simplemente salga de GDB y se enviará EOF.

Solución 2:

Podría intentar escribir en su directorio /proc pid. Digamos que el pid de sus demonios es 2000, intente escribir en /proc/2000/fd/0

Solución 3:

Igual que arriba, pero 'gato' no funcionó para mí. El archivo obtuvo EOF y finalizó después de enviar un comando.

Esto funcionó para mí:

#!/bin/bash

mkfifo /tmp/srv-input
tail -f /tmp/srv-input | myserver &

Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. Bash =~ Regex y Https://regex101.com/?

  3. ¿Qué tan portátiles son /dev/stdin, /dev/stdout y /dev/stderr?

  4. Cómo systemd-tmpfiles limpia /tmp/ o /var/tmp (reemplazo de tmpwatch) en CentOS/RHEL 7

  5. Cómo deshabilitar la eliminación automática de los archivos en los directorios /tmp y /var/tmp en CentOS / RHEL 5,6

Cómo actualizar OpenSUSE 12.2 a 12.3 (escritorio y servidor)

Directorio tmp de Linux:todo lo que necesita saber

UNIX/Linux:¿Cuál es el permiso correcto de los directorios /tmp y /var/tmp?

¿Cómo puedo detener un proceso de Symfony que está escuchando en http://127.0.0.1:8000?

¿Cuál es la diferencia entre /tmp y /run?

¿Deberían vivir los sitios web en /var/ o /usr/ según el uso recomendado?