Почему системный вызов grep l oop getdents? - PullRequest
0 голосов
/ 03 марта 2020

Я запускаю рекурсивную команду grep для веб-пространства на Linux сервере Ubuntu 18.04.4 LTS, чтобы найти все файлы с указанной фразой c. Команда, кажется, висит и ничего не делает. Я запустил процесс strace, и он, похоже, застрял при системном вызове getdent.

Команда выглядит следующим образом:

grep -r needle /var/www/haystack

Когда я запускаю strace в процессе я получаю следующие результаты:

strace -p 2066
strace: Process 2066 attached
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4, /* 585 entries */, 32768)   = 32760
getdents(4

Почему grep просто перебирает гетденты и не прогрессирует? Есть ли способ диагностировать или устранить эту проблему, не прерывая команду?

...