再帰 grep が / で開始され、ハングします

再帰 grep が / で開始され、ハングします

私は複数のプラットフォームで次の grep 検索パターンを使用しました。

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

例えばフリーBSD8.0フリーBSD6.4そしてデビアン 6.0(squeeze) コマンドはルート ディレクトリから再帰検索を実行し、バイナリ ファイルに 'string_to_match' がないものと想定し、デバイス、ソケット、名前付きパイプをスキップします。フリーBSD8.0そしてフリーBSD6.4GNU grepバージョン2.5.1を使用し、デビアン 6.0GNU grepバージョン2.6.3を使用します。フリーBSD6.4stderrに最後に出力された情報は「grep: /dev/cuad0: デバイスがビジーです」. この後、grepは「top -m io -o total」によるとgrepのI/O使用量が存在しないことからアイドル状態になります。同じ動作は以下でも当てはまります。フリーBSD8.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:~#

何が原因でしょうか?どのファイルを表示する方法はありますか?グレップ現在処理中ですlsof存在しない?私は使用できるlsofDebianでは、問題のあるファイル名は「0xc6b2c230 file struct, ty=0, op=0xc0d34120」のようです。これが何なのかわかりません。使用できません。lsofまたは統計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

関連情報