GNU/Linux >> Belajar Linux >  >> Linux

Menulis ke stdin dari proses latar belakang

Solusi 1:

Anda dapat memulai server Anda dengan pipa bernama (fifo) sebagai masukannya:

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

cat > /tmp/srv-input & penting untuk menghindari server Anda menerima EOF. Setidaknya satu proses harus membuka fifo secara tertulis sehingga server Anda tidak menerima EOF. PID dari perintah ini disimpan di /tmp/srv-input-cat-pid file untuk pembunuhan terakhir.

Jika Anda sudah memulai server, Anda harus menggunakan debugger seperti gdb untuk dilampirkan ke proses Anda untuk mengalihkan stdin-nya ke fifo:

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

Dan kemudian lakukan sesuatu seperti di bawah ini untuk mengirim input ke server Anda (di jendela terminal lain jika perlu):

echo "command" > /tmp/srv-input

Untuk mengirim EOF ke server Anda, Anda perlu mematikan cat > /tmp/srv-input proses dimana PID telah disimpan di /tmp/srv-input-cat-pid file .

Dalam kasus GDB, keluar saja dari GDB dan EOF akan dikirim.

Solusi 2:

Anda dapat mencoba menulis ke direktori /proc pidnya. Katakanlah pid daemon Anda adalah 2000, coba tulis ke /proc/2000/fd/0

Solusi 3:

Sama seperti di atas, tetapi 'kucing' tidak berfungsi untuk saya. File mendapatkan EOF dan berakhir setelah mengirimkan satu perintah.

Ini berhasil untuk saya:

#!/bin/bash

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

Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

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

  3. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  1. UNIX / Linux :Apa izin yang benar dari direktori /tmp dan /var/tmp?

  2. Bagaimana saya bisa menghentikan proses symfony yang mendengarkan di http://127.0.0.1:8000

  3. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  1. Bagaimana cara mengetahui dari folder mana suatu proses sedang berjalan?

  2. Mengapa meletakkan hal-hal selain /home ke partisi terpisah?

  3. Apa perbedaan antara /tmp dan /run?