如果我想长时间 运行 一个程序,我该如何忽略 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
参数),您需要超级用户权限才能更改它。
我有一个 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
参数),您需要超级用户权限才能更改它。