如何自动设置单个用户的核心转储大小?

如何自动设置单个用户的核心转储大小?

我正在运行 OpenSUSE。我通常使用交互式非登录shell打开控制台,并且经常在登录后bash使用。tcsh我正在编写一些C代码,使用 进行编译gcc,并且我希望在可执行文件失败时创建核心转储文件。

我知道我可以手动选择核心转储大小不受限制,但我不想输入

limits coredumpsize unlimited

tcsh

ulimit -c unlimited

bash每次我以用户身份登录时都在默认 shell 中。

有没有办法在我以用户身份登录bash和/或时自动设置核心转储大小tcsh

答案1

经过一番研究后,我可能已经解决了这个问题。一旦我登录到 UNIX 计算机,它就会home根据所选的 shell 从系统上的文件中的可用目录中将我重定向到目录,\etc\passwd如下所示:

alandella:x:1000:100:alandella:/home/alandella:/bin/bash

这解释了非登录交互式bashshell (konsole)。 shell 就这样bash运行吧tcsh,登录/注销时会读取以下文件:

~/.login  -> Executes cmds at login
~/.tcshrc ->               same as ~./bashrc in bash and ~./cshrc in csh
~/.logout ->               at logout

因此,通过将以下行添加到~/.tcshrc~/.bashrc文件中:

~/.bashrc -> ulimit -Sc X
~/.tcshrc -> limit coredumpsize X

其中X是一个值 (kB) 或unlimited,它应该可以解决问题。

有时,系统还会告诉您要编辑该~/.profile文件。我没有编辑它,即使我的bashshell 在登录时获取它。为什么没有区别呢?因为我总是使用非登录 shell,所以我双击 konsole 打开终端。~/.profile文件在启动时仅在登录 shell 中获取(通常sh是我不使用的)。我bash按顺序查看以下文件:

.bash_profile -> .bash_login -> .profile

就我而言,前两个文件不存在,因此如果我使用登录 shell,则bash源文件不存在。.profile

笔记。此操作必须以 root 身份完成,并且为了使此技巧发挥作用,必须/应该满足以下条件:

  1. 该文件/etc/security/limits.conf为用户和根设置合适的硬/软限制。如果将核心转储大小硬性限制为 2000 kB,那么当我们修改~/.bashrc为 3000 kB 时,核心转储大小限制将继续为 2000 kB。抬头 limits.conf

  2. 下面的文件/etc/pam.d包含该session required pam_limits.so行,以便允许/etc/security/limits.conf进行设置。

  3. 该文件/etc/sysctl.conf包含kernel.core_pattern = core.%e.%p,这设置了生成的核心文件的格式,其中 %e 是可执行文件名,%p 是 pid。

相关内容