Вы правы, существует общепринятое соглашение, согласно которому обратная косая черта используется для экранирования символов, либо указанный символ имеет особое значение, и вы хотите, чтобы он был буквальным:
# echo 'It\'s a string!'
В приведенном выше примере апостроф используется для ограничения буквальной строки, но, поскольку вам нужен апостроф внутри строки, вы должны его избежать.
Другой случай - противоположный, когда вам нужен «нормальный» символ, чтобы иметь какое-то особое значение:
# grep '\s/tmp' /etc/fstab
В приведенном выше примере обратная косая черта указывает grep, что s
имеет особое значение и не является буквальным s
(это пробел RegEx: пробел, табуляция, новая строка, возврат каретки, вертикальная табуляция)
Другими словами, когда у символа есть 2 возможных значения, вы избегаете его, чтобы быть второстепенным значением.
Изменить:
Для вашего первого примера:
rpm-qa rpmname\*
Здесь *
имеет особое значение (все, что начинается с 'rpmname'), но чтобы оболочка не пыталась его расширить, вы избегаете его, поэтому команда rpm
получает литерал *
и может обрабатывать его соответствующим образом.
Это происходит столько раз, сколько строк будет интерпретироваться, и может возникнуть настоящая проблема, когда строка передается несколькими командами.
Параметр overcommit_memory
учитывается в трех местах подсистемы управления памятью -.
Основной из них является__vm_enough_memory
в mm/util.c
, который определяет, достаточно ли памяти для продолжения выделения памяти (обратите внимание, что это вспомогательная функция, которая не обязательно вызывается ). Если overcommit_memory
равно 1, эта функция всегда завершается успешно. Если это 2, он проверяет фактическую доступную память. Если он равен 0, он использует знаменитую эвристику, о которой вы упоминаете; это происходит следующим образом:
cap_sys_admin
)Полученная сумма используется в качестве порога для выделения памяти.
mmap
также проверяет, что параметр:MAP_NORESERVE
соблюдается, если разрешена избыточная фиксация (режимы 0 и 1 ), и приводит к выделению памяти без резервного свопа(VM_NORESERVE
). В данном конкретном случае режим 0 фактически эквивалентен режиму 1; это то, что «вызовы mmap(2)
с MAP_NORESERVE
не проверяются» относится к :это означает, что вызовыMAP_NORESERVE
mmap
всегда будут успешными, а выделение более -приведет к OOM -убийственному степпингу постфактум или нарушение сегмента при попытке записи.
shmem
ведет себя аналогично mmap
.
Исчерпание адресного пространства должно приводить к сбоям выделения, а не к уничтожению OOM -, поскольку выделение фактически не может продолжаться.