Это вызывается путем буферизации в glibc. В случае ls
вывод находится в одном внутреннем буферном, и как таковое передается только head
. Для ps -eF
, вывод больше и так однажды head
концы, следующее grep
получает остающиеся части (но не целое) вывод ps
.
Можно избавиться от него путем освобождения буфера канала - например, с sed -u
(Я не уверен, что это не расширение GNU):
$ ls -al / | sed -u "#" | { head -n 1; grep bin; }
total 76
drwxr-xr-x 2 root root 4096 Oct 2 21:52 bin
drwxr-xr-x 2 root root 8192 Oct 3 01:54 sbin
Есть два параметра, которые ограничивают количество открытых файлов: ограничение на процесс и ограничение на уровне системы. Общесистемный предел устанавливается sysctl fs.file-max
, который можно настроить в /etc/sysctl.conf
(чтение во время загрузки) или установить на лету. командой sysctl
или записав в / proc / sys / fs / file-max
. Ограничение на процесс устанавливается ulimit -n
.
Предел для каждого процесса наследуется каждым процессом от своего родителя. Значение по умолчанию может быть установлено в /etc/security/limits.conf
, но это применимо только к интерактивным сеансам, а не к демонам, запускаемым во время загрузки.Он будет применяться к демону, только если он запущен через интерактивный сеанс.
Чтобы увеличить (или уменьшить) ограничения на процесс для демона, в общем,отредактируйте его сценарий запуска и добавьте вызов ulimit
непосредственно перед запуском демона. Пакет Redis Debian поставляется с настройкой конфигурации в отдельном файле: / etc / default / redis
. Закомментируйте строку ULIMIT =
и при необходимости увеличьте значение.