Как я могу игнорировать сигнал SIGXCPU, если я хочу запустить программу в течение длительного периода времени? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть программа C, выполненная на Linux, которая решает проблему 'Hanoi_Towers' для n элементов с итерационным решением.

Программа отлично работает до n = 30, для n = 30 это занимает около 3 минут.

однако для большего n, например для n = 35, программа вылетает после 10 минут работы.

Как я могу сказать Linux оболочка, чтобы позволить программе запускаться столько, сколько нужно для решения проблемы?

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете игнорировать сигнал SIGXCPU:

signal(SIGXCPU, SIG_IGN);

Однако, это только немного сэкономит вам время. SIGXCPU запускается, когда вы достигаете мягкого предела ЦП, а SIGKILL (который вы не можете игнорировать) происходит, когда вы добираетесь до жесткого предела ЦП.

Но вы хотите проверить, является ли предел ЦП низким, и если Вы можете увеличить это. В bash вы можете проверить с помощью ulimit -t и изменить его, как могли.

Программно вы можете изменить RLIMIT_CPU с помощью setrlimit.

Однако если ограничение ЦП установлено для всей системы или для определенных c пользователей администратором (например, sysctl параметры), вам потребуются привилегии суперпользователя, чтобы изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...