다음 방법으로 코어 파일 제한 크기가 변경되지 않는 이유는 무엇입니까?

다음 방법으로 코어 파일 제한 크기가 변경되지 않는 이유는 무엇입니까?

이 문제를 해결하려면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. 이 접근 방식은 현재 셸의 코어 파일 제한 크기를 일시적으로 변경합니까, 아니면 모든 사용자 또는 현재 사용자의 모든 셸에 대한 코어 파일 제한 크기를 영구적으로 변경합니까?

  2. 고쳐 쓰다:원본 게시물https://stackoverflow.com/a/17483998/156458그리고https://unix.stackexchange.com/a/238413/674그리고https://unix.stackexchange.com/a/169035/674모두 권장됩니다 sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". 그러나 둘 다 생성된 쉘 ulimit -c 1024에만 영향을 미치 므로 이 명령의 목적은 무엇입니까? 또한 변경된 제한 사항을 활용하는 것도 의미가 없습니다.exec su $LOGNAME"sudoexec su $LOGNAME"


노트:이 문제를 해결하는 다른 방법이 있지만 내 초점은 위의 방법이 작동하지 않는 이유에 있습니다.

  1. sudo가 실행하는 쉘에 새로운 제한 값을 사용하여 명령을 넣어야 할까요?

    예를 들어

    $ sudo sh -c "ulimit -c 1024 && sleep 100"
    ^\Quit
    $ ls
    core
    
  2. 나는 또한 그것을 수정하려고 노력할 수도 있습니다 /etc/security/limits.conf.

答え1

맨페이지에 따르면 ulimit"셸에서 사용할 수 있는 리소스와 시작되는 프로세스에 대한 제어를 제공합니다." 따라서 이 ulimit값은 현재 쉘에 유효합니다.

서브셸을 호출 ulimit중이며 종료되면 기본값으로 돌아갑니다 ulimit.

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

答え2

ulimit명령은 호출된 쉘과 그 하위 항목에 적용됩니다.

명령에는 su사용자가 설정한 제한이 있습니다. 상위 쉘은 영향을 받지 않습니다.

答え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 설명된 대로 셸 창의 범위로 제한되지 않고 전역적이며 모든 사람/모든 사람에게 유효합니다 .

일부 항목을 잘못 설정하면 시스템에 로그인하지 못할 수도 있습니다.

答え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

보시다시피 하드 제한은 귀하의 제한보다 훨씬 큽니다. 그렇기 때문에 아무도 당신의 문제를 이해할 수 없습니다.

일반 사용자는 소프트 제한을 하드 제한으로 높일 수 있으므로 귀하의 질문에 대한 요청에는 루트 권한이 필요하지 않습니다.

関連情報