Kill
Hot 將 EOF 寫入文件,以停止任何拖尾程序
我有多個程序拖尾文件,如何將 EOF 寫入文件以停止拖尾程序?
例如,
tail -F $HOME/somefile.log
那是在某個終端的某個地方執行,不知道在哪裡。如何將 EOF 寫入日誌文件,以便任何拖尾該文件的程序停止拖尾它?
在某些情況下,我正在跟踪一個 fifo:
mkfifo fivel tail -f fivel
我相信將 EOF 寫入命名管道實際上可能會停止/殺死任何拖尾 fifo 的程序,而將 EOF 寫入正常文件可能不會停止拖尾程序。
對我來說,這似乎不是實現這一目標的正確方法。我認為您想針對尾部程序
$$ es $$讀取文件而不是文件本身。請考慮以下內容。
ps -ef | grep "[t]ail" | grep 'somefile.log' | tr -s ' ' | cut -d' ' -f2 | xargs kill
ps -ef
將顯示系統上執行的所有程序。grep "[t]ail"
將找到名稱中帶有 tail 的所有程序(不包括這個 grep)。grep 'somefile.log'
將從這些文件中找到名稱中帶有 somefile.log 的文件。tr -s ' '
會將所有多個空間壓縮為一個。cut -d' ' -f2
將使用空格作為分隔符僅獲取第二列,即 PID。xargs kill
將殺死該PID。這將殺死任何讀取文件的尾部程序(除了一些奇怪的極端情況,例如名為 tailsomefile.log 的日誌文件)。可能有一種更清潔的方法來做到這一點,但這是我第一個立即顯而易見的解決方案。我已經測試過它可以在 Linux 上執行。
在正常文件上使用 -f 執行時,tail 命令不會在 EOF 上退出。它明確地等待更多數據。因此,文件末尾已經有一個 EOF - 它不會導致 tail 退出,因為它不應該這樣做。
唯一的辦法就是殺死尾巴。跑
ps ax|grep tail
然後殺死在合適的尾部程序中顯示的程序ID。或者使用
pkill tail
殺死所有尾程序。小心使用它,因為您可能會殺死不想殺死的程序。