grep recursivo iniciado em / trava

grep recursivo iniciado em / trava

Usei o seguinte padrão de pesquisa grep em várias plataformas:

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

Por exemplo emFreeBSD 8.0,FreeBSD 6.4eDebian 6.0(espremer). O comando faz uma pesquisa recursiva começando no diretório raiz, assume que os arquivos binários não possuem o 'string_to_match' e ignora dispositivos, soquetes e pipes nomeados.FreeBSD 8.0eFreeBSD 6.4use GNU grep versão 2.5.1 eDebian 6.0usa GNU grep versão 2.6.3. SobreFreeBSD 6.4, a última informação impressa em stderr foi"grep: /dev/cuad0: Dispositivo ocupado". Depois que esse grep fica inativo, de acordo com "top -m io -o total", o uso de E/S do grep é inexistente. O mesmo comportamento é verdadeiro emFreeBSD 8.0, mas a última informação enviada para stderr é"grep: /tmp/.wine-0: Permissão negada"na minha instalação. No caso do Debian, a última saída para stderr é"grep: /proc/sysrq-trigger: erro de entrada/saída". Se eu verificar o uso de E/S do processo grep no Debian, será o seguinte:

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:~#

O que pode causar isso? Existe uma maneira de visualizar qual arquivogrepestá atualmente processando casolsofnão está presente? eu consigo usarlsofno Debian e parece que o nome do arquivo problemático é "0xc6b2c230 file struct, ty=0, op=0xc0d34120". Não tenho certeza do que é isso. Não consigo usarlsofoufstatno FreeBSD.

PS: eu sei que poderia usarencontrarutilidade, mas esta não é a questão.

Responder1

No Linux, em vez de lsofvocê pode listar o conteúdo de /proc/$(pgrep grep)/fd. Você deverá ver um link simbólico para cada descritor de arquivo aberto para esse processo e ele apontará para o arquivo ao qual corresponde. Aqui está um exemplo do que isso fez por mim:

$ 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

informação relacionada