Я хотел сравнить два файла и проверить, существует ли каждая строка в file1
в file2
. Моя первая попытка: grep -v -f file2 file1
. Это приводило к множеству синтаксических ошибок (но ничего не зависало). Я быстро понял, что это потому, что мне нужно использовать -F
как описано здесь . Поэтому я запустил grep -Fvf file2 file2
и через несколько секунд вся моя система зависла на несколько минут, пока xorg полностью не рухнул.
Я смог сфотографировать застывший экран:
И как только я наконец смог войти в tty2, меня встретили с этим:
Вопросы:
- Была ли причина зависания системы просто в том, что ей не хватило оперативной памяти, или есть еще?
- Почему grep использует ~ 14 ГБ ОЗУ (и хочет больше) для сравнения двух файлов размером 250 МБ?
- Я мог бы использовать инструменты для ограничения оперативной памяти, которые может использовать grep, но AFAIK - все они просто убьют процесс, как только он достигнет x ГБ ОЗУ, так что это мне не поможет. Что делать в такой ситуации? Давайте предположим, что мы должны использовать grep.
Изменить: я уже нашел обходной путь без grep. Мне действительно любопытно, почему и как это все еще может произойти. +14 ГБ ОЗУ для двух 250 МБ файлов мне просто кажется странным. Я не ищу альтернативу тому, как я могу сравнить свои файлы с этим вопросом.