Использование bash:
text="hello world unix"
if [[ $text =~ ^([^[:space:]]+).*[[:space:]]([^[:space:]]) ]]; then
declare -p BASH_REMATCH
echo "${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
fi
declare -ar BASH_REMATCH='([0]="hello world u" [1]="hello" [2]="u")'
hellou
Команда оболочки ulimit
применяется только к текущей оболочке и ее потомкам. Это встроенная -, а не отдельная команда.
Вы не можете запустить отдельный процесс оболочки, выполнить в нем ulimit
и ожидать, что он окажет какое-либо влияние на родительский процесс.
Из C вы должны использовать функции getrlimit(2)
и setrlimit(2)
, чтобы получить и установить лимиты ресурсов для текущего процесса и его потомков. Хотя, судя по вашему подходу, я думаю, они не будут делать то, что вы от них ожидаете.
Взгляните на pam_limits
, модуль PAM (Pluggable Authentication Modules )для установки ограничений ресурсов при создании сеанса пользователя. Вам нужно будет настроить PAM для использования этого модуля, а затем вам нужно будет настроить ограничения в /etc/security/limits.d/
. См.https://linux.die.net/man/8/pam_limitsдля получения дополнительной информации.