에서 다음 man zsh
을 볼 수 있습니다.
[...] 다시 종료하려고 하면 쉘이 다시 경고하지 않습니다. 이 옵션을 설정
SIGHUP
하면HUP
보류 중인 작업이 종료되고 실행 중인 작업에 신호가 표시됩니다.
zsh
작업이 백그라운드에서 실행 중인 경우 해당 작업이 종료되는 것을 방지할 수 있는 방법이 있습니까?
답변1
소스코드를 보면 직접적인 방법은 없는 것 같습니다. 백그라운드 작업 확인은 다음과 같습니다.zexit
, 기본 zsh 프로세스가 from exit
, from logout
, 파일 끝 또는 기타 다양한 상황에서 종료를 시도하기로 결정할 때 호출됩니다. 종료 명령을 취소하려면 stopmsg
0이어야 합니다 . stopmsg
2 "(실행 중 | 일시 중지됨 | 중지된) 작업이 있습니다."라는 경고가 표시된 후 . 유일한 방법 stopmsg
은 문을 닫는 것뿐이다명령 실행 준비(비어있지 않은 명령줄에서)두 배. 따라서 를 실행하면 exit
다음에 입력하는 명령은 종료 보호되지 않습니다.
exit
나중에 재설정하기 위해 no-op 명령을 위조할 수 있는 내장 함수 에 연결하는 방법(또는 함수 등으로 대체하는 방법)이 생각나지 않습니다 stopmsg
.
내장된 기능을 비활성화 exit
하거나 작업이 있는지 확인하는 기능으로 대체할 수 있습니다.
function exit {
emulate -L zsh
setopt extended_glob
if [[ -n ${jobstates[(r)s*]} ]]; then
echo "you have suspended jobs"
return 1
fi
if [[ -n ${jobstates[(r)^done:*]} ]]; then
echo "you have running jobs"
return 1
fi
builtin exit "$@"
}
exit
그러나 이것은 다른 방법이 아닌 이것에만 작동합니다 .
파일 끝의 경우 다음을 수행할 수 있습니다 setopt ignore_eof
.