递归 grep 开始于 / 挂起

递归 grep 开始于 / 挂起

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

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

例如FreeBSD 8.0FreeBSD 6.4Debian 6.0(挤压)。命令从根目录开始进行递归搜索,假定二进制文件没有“string_to_match”,并跳过设备、套接字和命名管道。FreeBSD 8.0FreeBSD 6.4使用 GNU grep 版本 2.5.1 和Debian 6.0使用 GNU grep 版本 2.6.3。FreeBSD 6.4,最后打印到 stderr 的信息是“grep:/dev/cuad0:设备繁忙”。在此之后,grep 只是闲置,因为根据“top -m io -o total”,grep 的 I/O 使用量不存在。在FreeBSD 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目前正在处理此案lsof不存在?我可以使用lsof在 Debian 下,有问题的文件名似乎是“0xc6b2c230 文件结构,ty=0,op=0xc0d34120”。我不确定这是什么。我无法使用lsof或者状态统计在 FreeBSD 下。

附言:我知道我可以使用寻找效用,但这不是问题所在。

答案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

相关内容