recursiongrep从/挂起

我在多个平台上使用了以下grepsearch模式:

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

例如在FreeBSD 8.0FreeBSD 6.4Debian 6.0 (squeeze)上。 命令做从根目录开始的recursionsearch,假定二进制文件没有'string_to_match'并跳过设备,套接字和命名pipe道。 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:Device busy” 。 在这个grep只是按照“top -m io -o total”闲置的时候grep的I / O使用不存在。 在FreeBSD 8.0下同样的行为是正确的,但是在我的安装中发送到stderr的最后一个信息是“grep:/tmp/.wine-0:Permission denied” 。 在Debian的情况下,最后输出到stderr是“grep:/ proc / sysrq-trigger:input/输出错误” 。 如果我在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不存在? 我可以在Debian下使用lsof ,看起来有问题的文件名是“0xc6b2c230 file struct,ty = 0,op = 0xc0d34120”。 我不知道这是什么..我不能在FreeBSD下使用lsoffstat

PS:我知道我可以使用查找工具,但这不是问题。

在Linux上,可以列出/proc/$(pgrep grep)/fd的内容而不是lsof 。 您应该为该进程的每个打开的文件描述符都看到一个符号链接,它将指向它所对应的文件。 下面是这个为我做的一个样本:

 $ 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