使用模块设置coredumpsize的限制

时间:2013-09-10 19:42:56

标签: linux tcl limit ulimit modulefile

我正在尝试将csh脚本转换为tcl脚本,以便在linux modules功能中使用。 csh脚本最初用于为软件包正确设置环境变量。每次他/她希望使用该软件时,我都不想让最终用户更改shell并运行3个命令,而是想创建一个与shell无关的简单单行命令,并适当地设置它们的环境。因此,使用modulefile似乎是完成此任务的完美方式。

当我尝试在coredumpsize上设置限制时出现问题,因为似乎没有任何方法可以在模块中设置此值。原始的csh命令如下所示:limit coredumpsize 0。我知道原来的bash命令行等同于ulimit -c 0注意:这两个命令都假设我想在使用此软件时禁用coredumpfiles。

我的模块文件代码尝试以依赖shell的方式调用此命令,b / c似乎没有模块文件本机的“限制”命令。

set shell [module-info shell]
if { $shell=="bash"} {
    set XARCH amd64
    [exec /bin/bash -c "ulimit -c 0"]
} elseif {$shell=="tcsh"} {
    set XARCH linux
    [exec /bin/tcsh -c "limit coredumpsize 0"]

基于我的网络研究,我找不到一个我可以修改的环境变量,虽然RLIMIT_CORE看起来可能接近我正在寻找的东西。我当前代码的问题是exec命令产生$ shell进程并运行one命令,而不是在调用tcl模块进程的shell上运行limit命令。

如果能够以一种简单的方式更改环境变量和设置coredumpsize的限制,理想情况下使用模块,将非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您无法通过运行shell来设置限制,因为该限制只会影响您创建的shell进程(而不是tcl进程本身)。

您需要了解如何直接调用setrlimit(2)系统调用。也许tclx可能有帮助。

花几个小时阅读Advanced Linux Programming

你误解了一些基本的Unix概念,特别是进程。

答案 1 :(得分:0)

module在当前正在运行的shell上评估在stdout上生成的modulefile评估。

以下ulimit模块文件应有助于设置在当前运行的Shell上应用给定的ulimit配置

#%Module

switch -- [module-info shelltype] {
    {sh} {
        puts stdout "ulimit -c 0"
    }
    {csh} {
        puts stdout "limit coredumpsize 0"
    }
}

加载模块文件,我们可以检查当前外壳上的ulimit配置是否已更改:

$ ulimit -c
unlimited
$ module -V
Modules Release 4.1.3 (2018-06-18)
$ module load ./ulimit
$ ulimit -c
0