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


98

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 

bash와 같은 zsh의 기본 동작을 어떻게 만들 수 있습니까?

답변:


172

다음을 사용하여 프로그램을 시작하십시오 &!.

dolphin &!

&!( 또는 동등&| ) 모두에 zsh을 특정 바로 가기입니다 배경 부인 쉘을 종료하면 실행을 떠나 있도록 프로세스를.


2
완전성을 위해 이미 시작된 후이를 해제하는 방법도 나열 할 수 있습니까?
trusktr


이 솔루션을 좋아하고 개별 명령에 대해 구현할 것이지만 여전히 Zsh의 기본 동작을 변경하는 방법을 찾고 있습니다.
Vince

1
@Vince 항상 백그라운드 프로세스를 거부하도록 기본값을 변경하는 것을 의미합니까? 그렇다면, 당신은 함께 그렇게 할 수 setopt nohup귀하의에서 ~/.zshrc. 그런 다음 배경으로 명령을 시작하면 &항상 해당 명령을 거부합니다. 기본적으로 zsh는 종료를 시도 할 때 실행중인 작업이 있음을 알려줍니다. 을 사용하여이 기능을 끌 수도 있습니다 setopt nocheckjobs.
Anko

@Anko 나는 setopt nocheckjobs내가 원하는 것을 생각 합니다. 이제에서 사용 가능한 옵션을 찾았습니다 man zshoptions. 경고를 끄고 싶습니다. 나는 백그라운드 프로세스가 있고 필요하지 않은 때를 알고 있습니다. .NET으로 시작하지 않는 한 백그라운드 프로세스를 닫고 싶습니다 nohup. 나는 현재 백그라운드에서 PyCharm 을 실행하는 쉘 함수와 함께 이것을 사용합니다 nohup. 내가 입력 pycharm .하면 실행됩니다 nohup charm $@ &. 터미널을 닫아도 닫히지 않지만 여전히 경고가 표시되고 exit두 번 입력해야합니다 .
Vince

59

로부터 zsh을 문서 :

HUP

... zsh에서 셸이 종료 될 때 백그라운드 작업이 실행중인 경우 셸은 해당 작업을 종료하려고한다고 가정합니다. 이 경우에는 SIGHUP... 라는 특정 신호가 전송 됩니다. 쉘이 종료 된 후에도 계속해야하는 작업을 자주 시작하는 경우 옵션을 설정할 수 NO_HUP있으며 백그라운드 작업은 그대로 유지됩니다.

따라서 NO_HUP옵션을 설정하십시오 .

% setopt NO_HUP

경고를 원하지 않으면 예.
Carl Norum

30

나는 발견의 조합을 사용하여 해당 nohup, &그리고 disown내가 쉘이 종료 된 때 영구적으로 작업을 실행하게하지 않는 한, 저를 위해 일을.

nohup <command> & disown

단지는 동안 &나를 위해에 근무하고있다 bash에만 사용하는 경우, 내가 발견 nohup, &또는 disown쉘이 종료 될 때 자바 실행 명령을 호출하는 스크립트와 같은 명령을 실행에, 프로세스가 여전히 중지 것이다.

  • nohup명령을 무시 NOHUP하고 SIGHUP쉘에서 신호를 보냅니다.
  • & 프로세스를 하위 터미널의 백그라운드에서 실행합니다.
  • disown인수 (작업 목록에있는 작업 번호의 색인)가 뒤에 오면 쉘 SIGHUP이 하위 프로세스에 신호를 보내는 것을 방지합니다 . disown인수없이 사용 하면 가장 최근 작업이 기본값으로 설정됩니다.

나는 발견 nohupdisown에서 정보를 이 페이지&정보 이 SO 응답 .


5

나는 일반적으로 screen백그라운드 작업을 계속 실행하는 데 사용 합니다.

1) 스크린 세션 생성 :

screen -S myScreenName

2) 스크립트, 서비스, 데몬 또는 무엇이든 시작하십시오.

3) 화면 세션 종료 (분리)

screen -d

또는 바로 가기 ALT+A then d


수백 년 후-세션을 재개하려는 경우 (다시 연결) :

screen -r myScreenName

스크린 세션이 있는지, 이름과 상태 (연결 또는 분리)가 있는지 알고 싶다면 :

screen -ls

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


MacOS 사용자를위한 메모, 화면에서 분리하는 키보드 단축키는 Control + A, D 순이었습니다. 또한 이것은 프로세스를 실행하고 stdout에 양보하고 screen -d를 작성하는 데 도움이되지 않는 유일한 옵션이었습니다.
Bishoy

훌륭하지만 ZSH를 종료 할 때 bg 작업을 계속 실행하는 방법에 관한 Q와는 관련이 없습니다.
RichieHH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.