우리 연구실에는 애플리케이션과 그 출력을 하나씩 실행하기 위한 다음 스크립트(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 시리즈 도구 세트:
softlimit
데몬 도구에서softlimit
함대에서softlimit
daemontools-encore에서softlimit
어릴때부터 간식s6-softlimit
s6부터chpst
루넷에서runlimit
범죄자로부터
따라서 softlimit
nosh 도구 세트를 예로 사용하여 다음을 실행할 수 있습니다.
gnome-terminal -t A --tab -e "softlimit --coresize unlimited ./app1"
스크립트에서 서브쉘을 사용하십시오.
이는 터미널 에뮬레이터 프로세스의 제한 사항에도 적용됩니다. 이 경우에는 꽤 괜찮을 것입니다. 그러나 열린 파일 핸들 제한이나 프로세스 분기 제한과 같은 다른 제한이 적용되는 경우 문제가 될 수 있습니다.
(ulimit -c 무제한; urxvt -e "./app1")
알아채다이는 GNOME 터미널이나 Unicode RXVT의 클라이언트-서버 변형에는 적용되지 않습니다.. 이들 중 어느 것도 터미널 에뮬레이터를 스크립트의 아래 첨자로 직접 호출하지 않습니다. 이들은 스크립트에 설정된 리소스 제한을 가지거나 얻지 못하는 서버 프로세스를 통해 원격 호출을 수행합니다.
그놈 터미널을 실행시키십시오 ulimit
.
기억하세요. 아래에서 위로 구축해야 합니다.
- 명령 목록 작업을 수행하려면 실제 쉘이 필요합니다.
ulimit -c 무제한 실행 "./app1"
- 이 명령 목록을 전달하려면
sh
다음이 필요합니다.모두 논쟁이다그 후에-c
는 인용이 필요합니다.sh -c "ulimit -c 무제한 ; exec \"./app1\""
sh
GNOME 터미널에 호출을 전달 하려면 다음도 필요합니다.모두 논쟁이다이후에는-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
.