В вашем примере:
cat <(datE); echo $?
Что происходит, так это то, что datE
выдает ошибку и не генерирует никаких выходных данных. Затем выдает код ошибки. Однако ввод (null )затем представляется в cat
, который счастливо ничего не пережевывает, и теперь ваш код выхода равен нулю.
Если убрать промежуточный шаг, все будет работать так, как вы ожидаете:
$ datE; echo $?
datE: command not found
127
Если вы хотите, чтобы bash
прервал работу при любых сбоях в конвейере и любой неперехваченной ошибке, выполните следующие две команды:
set -e
set -o pipefail
Другие оболочки могут предоставлять аналогичные настройки.
vmalloc
— это распределитель ядра, он не (обязательно )относится к процессам. Ядро также большую часть времени видит виртуальную память, а не линейную память. Особенность vmalloc
заключается в том, что он выделяет только непрерывную виртуальную память, а не физическую память; kmalloc
выделяет непрерывную виртуальную и физическую память. Оба возвращают виртуальные адреса.
vmalloc
, в отличие от kmalloc
, должен выделять новые записи таблицы страниц(kmalloc
размещает из предварительно -отображаемой области ); они отображаются в общей части дерева таблицы страниц или, когда KPTI включен, в частной части ядра -дерева.
Подробнее см.Драйверы устройств Linuxв главе 8.