올바른 체인 로딩 명령을 사용하십시오.

올바른 체인 로딩 명령을 사용하십시오.

우리 연구실에는 애플리케이션과 그 출력을 하나씩 실행하기 위한 다음 스크립트(CentoS 6)가 있습니다.

cd A/
sleep 1
gnome-terminal -t A --tab -e "./app1"
cd ../B/
sleep 1
gnome-terminal -t b --tab -e "./app2" 
sleep 2
gnome-terminal -t c --tab -e "./app3"

이것은 완벽하게 작동합니다.

ulimit -c이제 우리가 원하는 것은 애플리케이션 중 하나(예: app3)에 대해 기본적으로 코어 덤프 파일을 생성하는 것이며 0기본값을 변경하고 싶지 않습니다.

gnome-terminal -t c --tab -e "ulimit -c unlimited ; ./c"작동하지 않습니다. 인터넷 검색에서 스크립트를 실행해야 한다는 것을 알았을 때 sh -c "ulimit -c unlimited".

gnome-terminal -t c --tab -e "sh -c "ulimit -c unlimited"완벽하게 작동합니다.
그러나
gnome-terminal -t c --tab -e "sh -c "ulimit -c unlimited ; ./app3"작동하지 않습니다.

app3에 대해서만 코어 덤프를 활성화하는 방법은 무엇입니까?참고: 우리는 이러한 일이 전 세계적으로 발생하는 것을 원하지 않습니다.

답변1

이를 수행하는 방법에는 세 가지가 있습니다.

올바른 체인 로딩 명령을 사용하십시오.

쉘 내장 명령을 사용하지 말고 ulimit대신 이 목적으로 개발된 명령을 사용하십시오.다양한 daemontools 시리즈 도구 세트:

따라서 softlimitnosh 도구 세트를 예로 사용하여 다음을 실행할 수 있습니다.

gnome-terminal -t A --tab -e "softlimit --coresize unlimited ./app1"

스크립트에서 서브쉘을 사용하십시오.

이는 터미널 에뮬레이터 프로세스의 제한 사항에도 적용됩니다. 이 경우에는 꽤 괜찮을 것입니다. 그러나 열린 파일 핸들 제한이나 프로세스 분기 제한과 같은 다른 제한이 적용되는 경우 문제가 될 수 있습니다.

(ulimit -c 무제한; urxvt -e "./app1")

알아채다이는 GNOME 터미널이나 Unicode RXVT의 클라이언트-서버 변형에는 적용되지 않습니다.. 이들 중 어느 것도 터미널 에뮬레이터를 스크립트의 아래 첨자로 직접 호출하지 않습니다. 이들은 스크립트에 설정된 리소스 제한을 가지거나 얻지 못하는 서버 프로세스를 통해 원격 호출을 수행합니다.

그놈 터미널을 실행시키십시오 ulimit.

기억하세요. 아래에서 위로 구축해야 합니다.

  1. 명령 목록 작업을 수행하려면 실제 쉘이 필요합니다.
    ulimit -c 무제한 실행 "./app1"
  2. 이 명령 목록을 전달하려면 sh다음이 필요합니다.모두 논쟁이다그 후에 -c는 인용이 필요합니다.
    sh -c "ulimit -c 무제한 ; exec \"./app1\""
  3. shGNOME 터미널에 호출을 전달 하려면 다음도 필요합니다.모두 논쟁이다이후에는 -e두 번째 수준 참조를 적용해야 합니다.
    gnome-terminal -e 'sh -c "ulimit -c 무제한 ; exec \"./app1\""'

답변2

ulimit -c이는 하드 제한을 제공하지 않고 소프트 제한을 제공합니다. 하드 제한은 슈퍼유저만 변경할 수 있고, 소프트 제한은 누구나 변경할 수 있습니다. 소프트 제한을 변경하면 해당 프로세스에만 영향을 미칩니다.

MacOS의 경우:

$ charlie on macbook in ~
❯❯ ulimit -aS
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 7168
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

$ charlie on macbook in ~
❯❯ ulimit -aH
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) unlimited
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 65532
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1064
virtual memory          (kbytes, -v) unlimited

귀하의 경우 하드 제한은 무제한이고 소프트 제한은 기본적으로 0입니다. ulimit이 프로세스에서 파일을 직접 사용하거나 편집하여 소프트 제한을 변경할 수 있습니다 /proc/FD/limits.

관련 정보