Linux
寫入後台程序的標準輸入
我在一個 Ubuntu 10.04 機器上,並通過 ssh 在後台(myserver &)啟動了一個伺服器。它一直執行良好,但我需要一種方法來獲取伺服器的標準輸入,因為控制伺服器的唯一方法是通過這種方法。
有什麼方法可以獲取已經執行的程序的標準輸入,以便我可以寫入它(並希望讀取它的標準輸出)?顯然,如果我現在要這樣做,我會從 FIFO 重定向到標準輸入開始,但不幸的是現在有點晚了。
有任何想法嗎?
您可以嘗試寫入它的 /proc pid 目錄。假設你的守護程序的 pid 是 2000,嘗試寫入 /proc/2000/fd/0
您可以使用命名管道 (fifo) 作為輸入來啟動伺服器:
mkfifo /tmp/srv-input cat > /tmp/srv-input & echo $! > /tmp/srv-input-cat-pid cat /tmp/srv-input | myserver &
cat > /tmp/srv-input &
避免您的伺服器收到 EOF 很重要。至少一個程序必須以書面形式打開 fifo,這樣您的伺服器就不會收到 EOF。該命令的 PID 保存在/tmp/srv-input-cat-pid
文件中以供稍後殺死。在您已經啟動伺服器的情況下,您必須使用調試器,例如
gdb
附加到您的程序以將其重定向stdin
到 fifo:gdb -p PID call close(0) call open(0, "/tmp/srv-input", 0600)
然後執行類似下面的操作將輸入發送到您的伺服器(如有必要,在另一個終端視窗中):
echo "command" > /tmp/srv-input
要將 EOF 發送到您的伺服器,您需要終止
cat > /tmp/srv-input
PID 已保存在/tmp/srv-input-cat-pid file
.在 GDB 的情況下,只需退出 GDB,就會發送 EOF。