En Linux, ¿cómo puedo ejecutar un proceso al que puedo volver más tarde para dar un comando después de desconectarme?

En Linux, ¿cómo puedo ejecutar un proceso al que puedo volver más tarde para dar un comando después de desconectarme?

Actualmente estoy desarrollando una aplicación de alojamiento de servidor (principalmente para mí o con fines de aprendizaje) y todo funciona muy bien y todo eso, no sé cuántos de ustedes están familiarizados con Counter-Strike en general, pero inicio mi servidor y todo. está bien, pero me separo de él (todo esto está escrito en Node.js), por lo que no puedo usarlo screenni nada, pero básicamente, si quisiera cambiar el nivel en el servidor, podría escribir changelevel de_dust2o algo así si iniciara el servidor manualmente, pero como estoy desconectado no tengo forma de darle ningún comando a este proceso.

He leído sobre FIFO y el uso de sockets Unix, pero todo lo que parece hacer es hacerme eco, no estoy seguro de no entender los FIFO, pero pensé que podría

mkfifo /tmp/server eco "./startserver" > /tmp/server &

y luego si quisiera

echo "changelevel de_dust2" > /tmp/server

Lo siento si no lo tengo claro, básicamente tengo un proceso demonio al que quiero enviar comandos.

Respuesta1

Debe asegurarse de que su proceso "daemon" lea desde la tubería.

mkfifo /tmp/server
./startserver < /tmp/server &
sleep 10000 > /tmp/server &

Más adelante, todo lo que escriba /tmp/server/aparecerá en startserverla entrada estándar de, por ejemplo:

echo "changelevel de_dust2" > /tmp/server

Nota: el sleepcomando es necesario para mantener la tubería abierta, porque cada echocomando intentará cerrarla cuando finalice, posiblemente terminando startserver.

Respuesta2

Se me ocurren tres formas. Mientras el proceso del demonio utilice stdin/out, no debería ser un problema comunicarse con él.

  1. Si utiliza screen, tmuxo una solución similar, no es necesario que desconecte el servidor. Puede mantenerlo "conectado" de forma segura a la consola y desconectar la pantalla.

  2. puede usarlo /proc/N/fd/{0,1}para comunicarse siempre que tenga los derechos adecuados, donde N es el PID del demonio, fd0 suele ser la entrada estándar y fd1 es la salida estándar del proceso N.

  3. Su enfoque con una canalización con nombre (FIFO) es correcto en esencia, pero lo está haciendo sólo a medias. Lo que hizo fue cambiar la salida estándar del proceso a la tubería, lo que significa que todo lo que el demonio imprime en la salida estándar se escribe en la tubería desde donde puede extraerlo mediante, digamos, cat. La tubería es semidúplex, lo que significa que solo puede conectar una entrada con una salida. Lo que necesitas son dos tubos, uno para entrada y otro para salida. Luego, todo lo que envíe al demonio a través de una tubería llegará allí mientras la respuesta pasa por la otra tubería a otro programa que leerá la tubería.

Supongamos que hay dos tuberías piny pout. Tu corres:

demonio < pin > puchero

Entonces debes ejecutar algo como

puchero de gato y gato > pin

para poder comunicarnos. Este es un mal ejemplo, puede tener condiciones de carrera ya que es asincrónico pero espero que entiendas la idea.

información relacionada