Bash에는 SIGQUIT에 대한 특별한 핸들러가 없으며 코어 덤프 생성 프로세스에 참여하지 않습니다. 커널은 코어 덤프의 rlimit가 충분히 큰 경우에만 SIGQUIT의 "기본 작업"의 일부로 코어 덤프를 작성합니다. rlimit는 Limit.conf의 내용을 기반으로 로그인하여 설정할 수 있습니다. ulimit 등을 사용하여 수동으로 조정됩니다.
나는 "Bash에는 특별한 SIGQUIT 처리기가 없습니다"라는 것을 잘 이해하지 못합니다.
모든 프로세스에는 신호 처리기가 있으며 그 중 일부는 기본값이며 일반적으로 프로세스는 기본 신호 처리기를 가져오고 fork()
여기에서 상위 프로세스의 신호 처리기를 복사하며 execve()
신호 처리기를 변경하지 않습니다. 이것이 맞습니까?
bash 프로세스는 기본 신호 처리기/트랩을 어디서 얻나요?
APUE에서는 기본 신호 처리기(및 링크 항목의 중심인 의 리소스 제한)를 설정하고 다음을 통과하는 첫 번째 프로그램인 경우 login
(또는 시작 시퀀스의 다른 프로그램)을 찾을 수 없습니다. 로그인 쉘까지:getty
/etc/security/limits.conf
올바르게 로그인하면 로그인이 됩니다.
• 홈 디렉토리(chdir)로 변경합니다.
• 최종 장치의 소유권(chown)을 우리가 소유하도록 변경합니다.
• 최종 장치에 대한 액세스 권한을 변경하여 읽고 쓸 수 있는 권한을 갖도록 합니다.
• setgid 및 initgroups를 호출하여 그룹 ID를 설정합니다.
• 홈 디렉터리(HOME), 셸(SHELL), 사용자 이름(USER 및 LOGNAME), 기본 경로(PATH) 등 로그인에 포함된 모든 정보로 환경을 초기화합니다.
• 사용자 ID(setuid)로 변경하고 아래와 같이 로그인 셸을 호출합니다.
execl("/bin/sh", "-sh", (char *)0);