从外部sh设置“ulimit c”

2024-07-05 09:38:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在启动时自动运行的程序,偶尔会导致一个coredump。

我想记录输出,但似乎无法以编程方式设置ulimit -c(它默认为0,每次都重置)。

我试过使用bash脚本,以及python的shos.systemsubprocess,但是我无法使用它。


Tags: 程序脚本bashos编程sh方式记录
3条回答

要将另一个解决方案放入mix-I,请使用limits.conf在debian中全局设置ulimit:

grep -q -F '* soft core 100000' /etc/security/limits.conf || echo '* soft core 100000' >> /etc/security/limits.conf
grep -q -F 'root hard core 100000' /etc/security/limits.conf || echo 'root hard core 100000' >> /etc/security/limits.conf

这也可以在python中使用os.system命令。

进程只能为自己及其子进程设置资源限制。它不能为其祖先设置资源限制。通过调用os.system('ulimit -c'),您将要求子“ulimit”进程设置祖先“Python”进程的资源限制。

Python程序可以使用^{}模块设置其资源限制:

import resource

resource.setrlimit(
    resource.RLIMIT_CORE,
    (resource.RLIM_INFINITY, resource.RLIM_INFINITY))

我猜您的问题是您还没有理解每个进程都设置了rlimit。如果在Python中使用os.system来调用ulimit,那么这只会在新生成的shell进程中设置ulimit,该进程随后立即退出,此后没有任何更改。

相反,您需要做的是在启动程序的shell中运行ulimit。程序运行的进程将从shell继承该rlimit。

我不认为有任何方法可以改变过程X的rlimit,从过程Y,其中X!=年

编辑:我必须收回最后一个,至少以防您在Linux中运行。有一个特定于Linux的系统调用prlimit,它允许您更改不同进程的rlimit,而且它似乎也可以在Python的resource模块中使用,尽管在那里没有文档。请参见手册页prlimit(2);我假设Python中可用的函数使用相同的参数。

相关问题 更多 >