grep
использует строку "$NAME.${var}\$"
в качестве регулярного выражения. Предположительно, до вашей проблемной строки кода переменным оболочки name
и var
были присвоены значения, так что оболочка интерпретирует значения вашего скрипта для $NAME
и ${var}
. Поскольку конечное "$" регулярного выражения экранируется обратным слешем, оболочка, интерпретирующая ваш сценарий, не пытается интерполировать значение переменной оболочки. "$" передается в grep
как часть регулярного выражения. И действительно, "$" имеет особое значение для grep
в контексте регулярного выражения. "$" означает "конец строки" для grep
. Ничто, кроме семантики того, для чего вы grep
, не требует конечного "$".
Вы определенно можете создать журнал всех ошибок страниц, но вы не сможете надежно их предсказать. Просто отключите виртуальную память и убедитесь, что ваше программное обеспечение помещается в ОЗУ, а еще лучше в L2. Может Зрам поможет. Также установите значение nice и используйте ОС реального времени, если хотите лучших результатов.
Похоже, вам нужно кое-что сделать в -тяжелом реальном времени. Правильный способ гарантировать, что в таком случае отказы страниц не будут иметь значения, состоит не в том, чтобы пытаться предсказать их (, что на самом деле невозможно ), а в том, чтобы управлять тем, когда и где возникают отказы страниц.
Самый простой способ сделать это в POSIX-совместимых и POSIX-подобных -системах — вызвать функцию mlockall()
из libc при запуске с установленными флагами MCL_CURRENT
и MCL_FUTURE
. Это делает три вещи:
munlockall()
). Обратите внимание, что это просто решает проблемы для вашей программы. У вас все еще могут быть помехи от другого кода, работающего в системе, но, к сожалению, вы мало что можете с этим поделать (, кроме работы с приоритетами планирования в реальном -времени, но это тоже мало поможет ).