Kill

Hot 將 EOF 寫入文件,以停止任何拖尾程序

  • July 10, 2017

我有多個程序拖尾文件,如何將 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
  1. ps -ef將顯示系統上執行的所有程序。
  2. grep "[t]ail"將找到名稱中帶有 tail 的所有程序(不包括這個 grep)。
  3. grep 'somefile.log'將從這些文件中找到名稱中帶有 somefile.log 的文件。
  4. tr -s ' '會將所有多個空間壓縮為一個。
  5. cut -d' ' -f2將使用空格作為分隔符僅獲取第二列,即 PID。
  6. xargs kill將殺死該PID。

這將殺死任何讀取文件的尾部程序(除了一些奇怪的極端情況,例如名為 tailsomefile.log 的日誌文件)。可能有一種更清潔的方法來做到這一點,但這是我第一個立即顯而易見的解決方案。我已經測試過它可以在 Linux 上執行。

在正常文件上使用 -f 執行時,tail 命令不會在 EOF 上退出。它明確地等待更多數據。因此,文件末尾已經有一個 EOF - 它不會導致 tail 退出,因為它不應該這樣做。

唯一的辦法就是殺死尾巴。跑

ps ax|grep tail

然後殺死在合適的尾部程序中顯示的程序ID。或者使用

pkill tail

殺死所有尾程序。小心使用它,因為您可能會殺死不想殺死的程序。

引用自:https://unix.stackexchange.com/questions/377369