작업이 백그라운드에 있는 경우 Zsh가 종료되지 않도록 방지

작업이 백그라운드에 있는 경우 Zsh가 종료되지 않도록 방지

에서 다음 man zsh을 볼 수 있습니다.

[...] 다시 종료하려고 하면 쉘이 다시 경고하지 않습니다. 이 옵션을 설정 SIGHUP하면 HUP보류 중인 작업이 종료되고 실행 중인 작업에 신호가 표시됩니다.

zsh작업이 백그라운드에서 실행 중인 경우 해당 작업이 종료되는 것을 방지할 수 있는 방법이 있습니까?

답변1

소스코드를 보면 직접적인 방법은 없는 것 같습니다. 백그라운드 작업 확인은 다음과 같습니다.zexit, 기본 zsh 프로세스가 from exit, from logout, 파일 끝 또는 기타 다양한 상황에서 종료를 시도하기로 결정할 때 호출됩니다. 종료 명령을 취소하려면 stopmsg0이어야 합니다 . stopmsg2 "(실행 중 | 일시 중지됨 | 중지된) 작업이 있습니다."라는 경고가 표시된 후 . 유일한 방법 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.

관련 정보