source

zsh를 종료하지만 실행 중인 작업을 열어두시겠습니까?

manysource 2023. 4. 25. 22:36

zsh를 종료하지만 실행 중인 작업을 열어두시겠습니까?

방금 bash에서 zsh로 바꿨어요

bash에서는 셸이 종료될 때 백그라운드 작업이 계속 실행됩니다.예를 들어, 여기 있습니다.dolphin다음 시간 이후에 계속 실행됩니다.exit:

$ dolphin .
^Z
[1]+  Stopped                 dolphin .
$ bg
[1]+ dolphin . &
$ exit

이것이 기본 동작으로 원하는 것입니다.

이와는 대조적으로 zsh의 동작은 작업 실행에 대해 경고하는 것입니다.exit, 다음 경우 닫으십시오.exit다시요. 예를 들면, 여기,dolphin두 번째가 되면 닫힙니다.exit-명령어는 실제로 셸을 종료합니다.

 % dolphin .
^Z
zsh: suspended  dolphin .
 % bg
[1]  + continued  dolphin .
 % exit
zsh: you have running jobs.
 % exit 

여기서 zsh의 기본 동작을 bash와 같이 설정하려면 어떻게 해야 합니까?

다음을 사용하여 프로그램을 시작합니다.&!:

dolphin &!

&! (또는&| 이와 동등하게 )은 셸을 종료하면 실행 상태를 유지할 수 있도록 백그라운드에서 프로세스를 해제하는 zsh 관련 바로 가기입니다.

zsh 설명서에서 다음을 수행합니다.

HUP

... zsh에서는 셸이 종료될 때 백그라운드 작업이 실행 중인 경우 셸은 사용자가 이 작업을 종료하기를 원하는 것으로 간주합니다. 이 경우 이 작업은 다음과 같은 특정 신호를 보냅니다.SIGHUP... 셸이 종료된 경우에도 계속 진행되어야 하는 작업을 자주 시작하는 경우 옵션을 설정할 수 있습니다.NO_HUP백그라운드 작업은 그대로 유지됩니다.

그러니까 그냥 세팅만NO_HUP옵션을 선택합니다.

% setopt NO_HUP

이 두 가지를 조합한 결과입니다.nohup,&,그리고.disown셸이 종료될 때 작업을 영구적으로 실행시키지 않기 때문에 이 방법이 효과적입니다.

nohup <command> & disown

그냥요&에서 저를 위해 일했습니다.bash,만 사용할 때 찾았습니다.nohup,&, 또는 을(를)disownjava run 명령을 호출하는 스크립트와 같이 실행 중인 명령에서는 셸이 종료될 때 프로세스가 계속 중지됩니다.

  • nohup명령을 무시합니다.NOHUP그리고.SIGHUP껍데기로부터의 신호입니다.
  • &하위 터미널의 백그라운드에서 프로세스를 실행합니다.
  • disown인수 뒤에 오는 인수(작업 목록의 작업 번호 색인)는 셸이 데이터를 전송하지 못하도록 합니다.SIGHUP하위 프로세스에 신호를 보냅니다.사용.disown인수를 지정하지 않으면 기본적으로 가장 최근의 작업으로 설정됩니다.

제가 찾았어요.nohup그리고.disown이 페이지의 정보를 참조하십시오.&SO 답변에 정보가 있습니다.

갱신하다

제가 처음 이 글을 썼을 때는 데이터 처리 스크립트/프로그램에 사용하고 있었습니다.이러한 사용 ts사례의 경우 (태스크 스풀러)와 같은 것이 잘 작동합니다.

저는 주로 사용합니다.screen백그라운드 작업을 계속 실행할 수 있습니다.

1) 화면 세션을 만듭니다.

screen -S myScreenName

2) 스크립트, 서비스, 데몬 등을 실행합니다.

3) 다음을 사용하여 화면 세션을 종료합니다(분리).

screen -d

바로 가기입니다.ALT+A then d


몇 백 년 후 - 세션을 재개하려면(재첨부) 다음을 수행합니다.

screen -r myScreenName

화면 세션, 이름 및 상태(첨부 또는 분리됨)를 알고 싶다면 다음을 수행하십시오.

screen -ls

이 솔루션은 bash, zsh 등과 같은 모든 터미널 인터프리터에서 작동합니다.참고하세요.man screen

언급URL : https://stackoverflow.com/questions/19302913/exit-zsh-but-leave-running-jobs-open 입니다.