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 &