如果我想长时间 运行 一个程序,我该如何忽略 SIGXCPU 信号?

How can I ignore SIGXCPU signal, if I want to run a program for a long period of time?

我有一个 C 程序,在 Linux 上执行,它解决了 'Hanoi_Towers' 问题,对于 n 个元素,使用迭代解决方案。

该程序在 n = 30 时运行良好,对于 n = 30 大约需要 3 分钟。

但是对于更大的 n,比如 n = 35,程序会在 运行 时间 10 分钟后崩溃。

如何告诉 Linux shell,让程序 运行 尽可能多地解决问题?

您可以忽略 SIGXCPU 信号:

signal(SIGXCPU, SIG_IGN);

不过,这只会为您赢得更多时间。 SIGXCPU 在您达到软 CPU 限制时启动,SIGKILL(您不能忽略)在您达到硬 CPU 限制时发生。

但您想检查 CPU 限制是否较低以及是否可以提高它。在 bash 中,您可以查看 ulimit -t 并根据需要进行更改。

以编程方式,您可以通过 setrlimit 更改 RLIMIT_CPU

但是,如果 CPU 限制是在整个系统中设置的或由管理员为特定用户设置的(例如 sysctl 参数),您需要超级用户权限才能更改它。