Я возился с моей системой и нашел новый способ использования памяти, но кажется, что команда less содержит только ограниченный объем данных до остановки / уничтожения команды.
Чтобы проверить, бегите (осторожно! очень быстро использует много системной памяти!)
$ cat /dev/zero | less
Из моего тестирования похоже, что команда уничтожается после того, как less достигает 2,5 гигабайта памяти, но я не могу найти ничего на странице руководства, которая предполагает, что это ограничит ее таким образом.
Кроме того, я не смог найти какую-либо документацию через Google по этому вопросу.
Любой свет к этому довольно удивительному открытию был бы великолепен!
Информация о системе: четырехъядерный Intel I7, 8 ГБ оперативной памяти.
$ uname -a
Linux Tyler-Work 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ less --version
less 458 (GNU regular expressions)
Copyright (C) 1984-2012 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
Обновить:
Меньшее количество процессов застревает после достижения 2,5 ГБ памяти, но перестает собирать входные данные из потока процесса, переданного по конвейеру. Проверка возвращаемых значений показывает, что процесс cat прерывается сигналом от less.
$ cat /dev/zero | less; echo "${PIPESTATUS[0]} ${PIPESTATUS[1]}"
141 0
Выходной статус 141 предполагает, что меньше убивает процесс cat через SIGPIPE (https://stackoverflow.com/questions/19120263/why-exit-code-141-with-grep-q#answer-19120674)
Собирая информацию из самого исполняемого файла, мы получаем, что двоичный файл содержит 64 бита, поэтому он не должен ограничиваться количеством оперативной памяти, которую он может использовать:
$ file /bin/less
/bin/less: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=539cf624699477e3e069b6c4e4b33842f22be2d2, stripped
Что не объясняет, почему less отправляет сигнал уничтожения процессу cat в виде этого определенного количества данных.