Читайте о функции setrlimit
. Вы, вероятно, хотите что-то вроде:
#include <sys/resource.h>
struct rlimit limits;
limits.rlim_cur = // soft limit
limits.rlim_max = // hard limit
int err = setrlimit(RLIMIT_DATA, &limits);
if(err) ...
Предполагается, что вы пишете для Unix / Linux / BSD / Mac / и т. Д., А не для Windows ... что кажется правильным предположением, поскольку вы используете execv
.
Пара замечаний: мягкий предел (rlim_cur
) может уведомить процесс о превышении лимита. Превышение жесткого предела (rlim_max
) приводит к сбою malloc()
, устанавливая errno
в ENOMEM
, что обычно приводит к смерти процесса. Прочтите справочную страницу или попробуйте, чтобы увидеть, как она работает в вашей системе. Если стек превышает rlim_max
, вы можете получить сигнал SIGSEGV
.
Как правило, только корневой процесс может вызвать rlim_max
. Обычный процесс может понизить rlim_max
или установить rlim_cur
на любое значение в диапазоне от 0 до rlim_max
.