
設備檔案“debug_port”是某個連接埠的輸出。我有三個腳本:
第一個腳本等待來自連接埠的一些信息,同時將資料記錄在日誌檔案中,然後執行其工作,使用日誌中的一些 grep 和回顯到 debug_port。
#first.sh
pkill cat
cat debug_port > $logfile1 &
running=$!
# perform its tasks...
kill $running
killall -s SIGPIPE cat
pkill -P $$
rm $logfile1
第二個等待其他一些資訊並執行另一項工作。
#second.sh
pkill cat
cat debug_port > $logfile2 &
running=$!
# <<< there is problem: no output from 'debug_port'
# perform its tasks...
kill $running
rm $logfile2
調用者依序調用它們
#caller.sh
./first.sh
./second.sh
問題是,我在第二個腳本中沒有「debug_port」的輸出。但我確信應該有一些。
答案1
當您正在讀取設備檔案。它可能是不可查找的:它是單一流。如果是這樣,從一個進程讀取,將阻止另一個進程讀取同一位元組。因此,您不應該同時讀取兩個進程。
如果您需要這樣做,那麼您需要分叉流。這可能會導致使用更多的記憶體 RAM/磁碟(取決於實作),因為資料必須儲存在某個地方。記憶體使用情況取決於進程之間的關係。