Disown은 -h 옵션을 사용하지 않습니다.

Disown은 -h 옵션을 사용하지 않습니다.

명령을 실행하고 있는데 이제 SSH 세션을 닫은 후에도 명령을 계속 실행하고 싶다는 것을 깨달았습니다. 인수로 시작하지 않고 문맥( - , ) &에 넣었습니다 . 이제 연결이 끊어진 후에도 계속되도록하려고합니다. 그게 목적이죠? 나는 이것을 시도했고 ( 내 직업을 #1로 표시 ) 다음에는 다음과 같은 결과를 얻습니다.CTRLzbgdisown -hdisown -hdisown -h 1jobs

disown: job not found: -h

disown매개변수 대신 작업 사양으로 "-h"를 사용하는 이유는 무엇입니까 ? zsh그게 중요하다면 나는 에 있어요 .

답변1

bash, zshksh93는 명령이 포함된 쉘입니다 disown. 세 가지 중에서 옵션을 bash지원하는 유일한 것입니다 h. -h이것이 없으면 zsh동작이 시뮬레이션되고(작업 테이블에서 제거됨), 이를 사용하면 -h동작이 시뮬레이션됩니다 ksh93(종료 시 SIGHUP이 전송되지 않지만 작업 테이블에서 제거되지 않아 계속 죽거나 죽을 수 있습니다 bg) fg. 그것).

다음과 같이 zsh를 사용하여 이 동작을 시뮬레이션할 수 있습니다.

typeset -A nohup
trap 'disown %${(k)^nohup}' EXIT
trap 'for i (${(k)nohup}) (($+jobstate[i])) || unset "nohup[$i]"' CHLD

따라서 nohup 연관 배열은 종료 시 SIGHUP을 보내지 않고 작업 목록을 저장합니다. 따라서 disown -h %1로 쓸 수 있습니다 nohup[1]=.

setopt nohup종료 시 작업에 SIGHUP을 보내지 않음 도 참조하세요 .

답변2

disown이 것만으로도 연결이 끊어진 후에도 프로그램이 계속 실행될 수 있습니다.

$ command_running_forever
^Z
zsh: suspended  command_running_forever
$ bg
[1]  + continued  command_running_forever
$ jobs
[1]  + running    command_running_forever
$ disown %1
$ logout

disown -hbash에 따라 작업이 작업 테이블에 남아 있고 bash가 수행할 때 SIGHUP을 수신하지 않도록 하는 bash 매개변수를 사용하십시오 help disown. 이 매개변수는 zsh에는 적용되지 않습니다.

관련 정보