2024-07-05 09:38:54 发布
网友
我有一个在启动时自动运行的程序,偶尔会导致一个coredump。
我想记录输出,但似乎无法以编程方式设置ulimit -c(它默认为0,每次都重置)。
ulimit -c
我试过使用bash脚本,以及python的sh、os.system和subprocess,但是我无法使用它。
sh
os.system
subprocess
要将另一个解决方案放入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”进程的资源限制。
os.system('ulimit -c')
Python程序可以使用^{}模块设置其资源限制:
import resource resource.setrlimit( resource.RLIMIT_CORE, (resource.RLIM_INFINITY, resource.RLIM_INFINITY))
我猜您的问题是您还没有理解每个进程都设置了rlimit。如果在Python中使用os.system来调用ulimit,那么这只会在新生成的shell进程中设置ulimit,该进程随后立即退出,此后没有任何更改。
rlimit
相反,您需要做的是在启动程序的shell中运行ulimit。程序运行的进程将从shell继承该rlimit。
ulimit
我不认为有任何方法可以改变过程X的rlimit,从过程Y,其中X!=年
编辑:我必须收回最后一个,至少以防您在Linux中运行。有一个特定于Linux的系统调用prlimit,它允许您更改不同进程的rlimit,而且它似乎也可以在Python的resource模块中使用,尽管在那里没有文档。请参见手册页prlimit(2);我假设Python中可用的函数使用相同的参数。
prlimit
resource
prlimit(2)
要将另一个解决方案放入mix-I,请使用limits.conf在debian中全局设置ulimit:
这也可以在python中使用
os.system
命令。进程只能为自己及其子进程设置资源限制。它不能为其祖先设置资源限制。通过调用
os.system('ulimit -c')
,您将要求子“ulimit”进程设置祖先“Python”进程的资源限制。Python程序可以使用^{} 模块设置其资源限制:
我猜您的问题是您还没有理解每个进程都设置了
rlimit
。如果在Python中使用os.system
来调用ulimit,那么这只会在新生成的shell进程中设置ulimit,该进程随后立即退出,此后没有任何更改。相反,您需要做的是在启动程序的shell中运行
ulimit
。程序运行的进程将从shell继承该rlimit。我不认为有任何方法可以改变过程X的rlimit,从过程Y,其中X!=年
编辑:我必须收回最后一个,至少以防您在Linux中运行。有一个特定于Linux的系统调用
prlimit
,它允许您更改不同进程的rlimit,而且它似乎也可以在Python的resource
模块中使用,尽管在那里没有文档。请参见手册页prlimit(2)
;我假设Python中可用的函数使用相同的参数。相关问题 更多 >
编程相关推荐