为什么以下方法不会改变核心文件限制大小?

为什么以下方法不会改变核心文件限制大小?

为了解决这个问题https://unix.stackexchange.com/a/446428/674, 我跟着https://stackoverflow.com/a/17483998/156458,但它没有设置核心文件限制大小?

$ sudo sh -c "ulimit -c 1024 && exec su t"

$ ulimit -c
0
  1. 这种方式是暂时更改当前 shell 的核心文件限制大小,还是永久更改所有用户或当前用户的所有 shell 的核心文件限制大小?

  2. 更新:原帖https://stackoverflow.com/a/17483998/156458https://unix.stackexchange.com/a/238413/674https://unix.stackexchange.com/a/169035/674全部推荐使用 sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"。但两者ulimit -c 1024都只exec su $LOGNAME" 影响 所创建的 shell sudo,那么该命令的目的是什么?exec su $LOGNAME"也没有做任何有意义的事情来利用更改后的限制。


笔记:我关注的是为什么上述方法不起作用,尽管还有其他方法可以解决这个问题:

  1. 我应该将使用新限制值的命令放在 sudo 执行的 shell 中

    例如

    $ sudo sh -c "ulimit -c 1024 && sleep 100"
    ^\Quit
    $ ls
    core
    
  2. 我也可以尝试修改一下/etc/security/limits.conf

答案1

根据联机帮助页,ulimit“提供对 shell 及其启动的进程可用资源的控制”。所以该ulimit值对于当前 shell 有效。

您正在ulimit子 shell 中调用,当它终止时,您将返回到默认ulimit值。

[root@centos7 ~]# ulimit -c
0
[root@centos7 ~]# ulimit -c 1024
[root@centos7 ~]# ulimit -c
1024

答案2

ulimit命令适用于调用它的 shell 及其后代。

该命令su将具有您设置的限制。父 shell 不受影响。

答案3

我很困惑,想知道我是否错过了什么

我认为您错过了(或没有认识到)/etc/security/limits.conf 这是来自 Suse Linux Enterprise Server 11.4 的模板,以及我如何将堆栈大小限制全局设置为无限制,而不是默认的 8KB。

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
*       hard    stack   unlimited
*       soft    stack   unlimited
*       hard    nofile  100000
*       soft    nofile  100000

这是来自 SLES,limits.conf名称和位置可能会有所不同,具体取决于您的 Linux 发行版。此处设置的值将是全局的,并且对所有内容/每个人都有效,而不是ulimit 像所描述的那样仅限于 shell 窗口的范围。

请注意,某些项目设置不当可能会导致您无法登录系统

答案4

您自己的答案现在包含问题中已经需要的信息:

您的系统有一个不寻常的设置。

在 Solaris 上,您有以下限制和 POSIX 资源集:

LC_ALL=C ulimit -aHS
-t: time(seconds) unlimited:unlimited
-f: file(blocks) unlimited:unlimited
-d: data(kbytes) unlimited:unlimited
-s: stack(kbytes) 10240:unlimited
-c: coredump(blocks) unlimited:unlimited
-n: nofiles(descriptors) 256:65536
-v: memory(kbytes) unlimited:unlimited

在 Linux 上,您有以下典型限制:

ulimit -aSH
-t: time(seconds) unlimited:unlimited
-f: file(blocks) unlimited:unlimited
-d: data(kbytes) unlimited:unlimited
-s: stack(kbytes) 8192:unlimited
-c: coredump(blocks) 0:unlimited
-m: memoryuse(kbytes) unlimited:unlimited
-u: processes(count) 26633:26633
-n: nofiles(descriptors) 1024:1048576
-l: memlock(kbytes) 64:64
-M: addressspace(kbytes) unlimited:unlimited
-L: locks(count) unlimited:unlimited
-i: sigpending(count) 26633:26633
-q: messagequeues(count) 819200:819200
-e: schedpriority(nice) 0:0
-r: rtpriority(nice) 0:0
-R: rttime(usec) unlimited:unlimited

如您所见,硬限制比您的大得多。这就是为什么没人能理解你的问题的原因。

由于允许普通用户将软限制提高到硬限制,因此您问题中的请求不需要 root 权限。

相关内容