遞歸 grep 開始於 / 掛起

遞歸 grep 開始於 / 掛起

我在多個平台上使用了以下 grep 搜尋模式:

grep -r -I -D skip 'string_to_match' /

例如關於自由BSD 8.0,自由BSD 6.4Debian 6.0(擠)。命令從根目錄開始進行遞歸搜索,假設二進位檔案沒有「string_to_match」並跳過裝置、套接字和命名管道。自由BSD 8.0自由BSD 6.4使用 GNU grep 版本 2.5.1 和Debian 6.0使用 GNU grep 版本 2.6.3。在自由BSD 6.4,最後印到 stderr 的資訊是“grep:/dev/cuad0:設備忙”。根據“top -m io -o Total”,此 grep 閒置後,grep 的 I/O 使用量不存在。同樣的行為也適用於自由BSD 8.0,但最後發送到 stderr 的訊息是“grep:/tmp/.wine-0:權限被拒絕”在我的安裝上。對於 Debian,最後輸出到 stderr 的是“grep:/ proc / sysrq-trigger:輸入/輸出錯誤”。如果我檢查Debian下grep進程的I/O使用情況,如下:

root@Debian:~# iotop -bp 22439
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
22439 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % grep -r -I
-D skip 10.10.10.99 /
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
22439 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % grep -r -I
-D skip 10.10.10.99 /
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN      IO    COMMAND
22439 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % grep -r -I
-D skip 10.10.10.99 /
^Croot@Debian:~#

什麼可能導致這種情況?有沒有辦法查看哪個文件grep目前正在處理案件拉索夫不在場嗎?我能夠使用拉索夫在 Debian 下,看起來有問題的檔名是「0xc6b2c230 file struct, ty=0, op=0xc0d34120」。我不確定這是什麼..我無法使用拉索夫或者統計數據在 FreeBSD 下。

PS:我知道我可以使用尋找實用性,但這不是問題。

答案1

在 Linux 上,lsof您可以列出/proc/$(pgrep grep)/fd.您應該看到該進程的每個打開文件描述符的符號鏈接,它將指向它對應的文件。以下是這對我所做的事情的範例:

$ ls -gG /proc/$(pgrep grep)/fd
total 0
lrwx------ 1 64 Oct 18 19:39 0 -> /dev/pts/2
lrwx------ 1 64 Oct 18 19:39 1 -> /dev/pts/2
lrwx------ 1 64 Oct 18 19:39 2 -> /dev/pts/2
lr-x------ 1 64 Oct 18 19:39 3 -> /usr/share/groff/1.18.1.4/font/devdvi/generate/texb.map

相關內容