“<command> & disown”과“nohup <command> & disown”의 차이점


41

이것은의 사용에 대한 나의 이해이다 &, disown및 nohup:

  • <command>: 터미널의 현재 내 프로세스 실행 bash, 인스턴스를 전경 (즉 프로세스가 나열됩니다 bash전경 작업과 stdin, stdout그리고 stderr여전히 터미널에 바인딩 ); 끊지 않는 면역 ;
  • <command> &: 터미널의 현재 내 프로세스 실행 bash, 인스턴스를 배경으로 (즉 프로세스가 나열됩니다 bash백그라운드 작업과 stdin, stdout그리고 stderr여전히 터미널에 바인딩 ); 끊지 않는 면역 ;
  • <command> & disown: 터미널의 현재 내 프로세스 실행 bash, 인스턴스를 배경으로 하지만 프로세스가됩니다 으로부터 분리 bash의 작업 '목록 (즉, 프로세스가로 표시되지 bash전경 / 백그라운드 작업과 stdin, stdout그리고 stderr여전히 터미널에 바인딩 ); 끊기에 면역 ;
  • nohup <command> & disown: 터미널의 현재 내 프로세스 실행 bash, 인스턴스를 배경으로 하지만 프로세스가됩니다 으로부터 분리 bash의 작업 '목록 (즉, 프로세스가로 표시되지 bash전경 / 백그라운드 작업과 stdin, stdout그리고 stderr있다 하지 여전히 터미널에 바인딩 ) ; 끊기에 면역 ;

그래서, 옆에서 nohup <command> & disown차단 stdin및 리디렉션 stdout과 stderr에 nohup.out가에 완전히 동일하게 간주 될 수있는 것처럼 기본적으로, 그것은 나에게 보인다 <command> & disown.

위의 모든 것이 맞습니까? 오해가 있습니까?


1
"전화 끊기 면역"과 "전화 끊기 면역"이란 무엇입니까?
— 혼돈

2
@chaos 부모 bash인스턴스 를 종료 / 종료 해도 프로세스가 종료 되지 않습니다.
— kos

답변:


31

당신의 이해는 기본적으로 정확합니다. 모두 disown와 nohup당신이 실행중인 작업을 중지하지 않고 실행중인 쉘 세션을 종료 할 수 있도록하는 데 사용됩니다. 몇 가지 설명 :

  • 실행할 이유가 없습니다 nohup command & disown, nohup이미 당신을 위해 그것을 모른다고 할 것입니다.

  • nohup는 POSIX에 의해 정의 되지만 disown not은 아닙니다 . 많은 쉘 (예를 들면하면서 수단은 bash, zsh, ksh) 그것을 가지고, 다른 사람은 (예를 들어 tcsh, csh, dash및 sh)를 필요가 없습니다.

  • disown명령을 실행 한 후 사용할 수 있지만 nohup이전에 사용해야합니다.

내가 알 수있는 한 두 명령의 실제 효과는 동일합니다. 그들은 각각 다른 기능이 부족한 기능을 가지고 있지만 ( help disown과 참조 man nohup) 기본 기능은 동일합니다.

이러한 도구와 도구의 차이점에 대한 자세한 내용은 여기에서 답변을 확인하십시오.


11
Nohup와 disown같은 것이 아니다 함께 두 명령을 사용하여 중복 아닙니다. 자세한 설명 은 이 답변 을 참조하십시오.
— 메모

7

stdin, stdout and stderr are still bound to the terminal올바른 개념은 아니지만 첫 번째에서 세 번째 포인트는 괜찮아 보입니다 . stdin항상 터미널을 통해 명령에 파일 이름을 입력하거나 터미널을 사용하는 방법으로 터미널에 바인딩됩니다. stdout and stderr are still bound to the terminal괜찮아

네 stdin, stdout and stderr are not still bound to the terminal번째 요점에서 당신은 나의 이전 단락에서 언급 한 것처럼 옳지 않습니다. 또한 여기서는 /dev/null입력 파일로을 사용 하고 있습니다 ( command예 : 명령이 cat이면) cat /dev/null.

5 번째 지점이 명령은 올바르게 사용한 넣어되지 nohup <command> & disown중 하나를 사용하는 동안, nohup또는 disown다른 하나는 필요하지 않습니다. 그들의 목적은 (을 무시하기 위해 SIGHUP) 동일 하지만 약간 다른 방식으로 기능합니다. 따라서 명령을로 단순화 할 수 있습니다 nohup <command> &.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.