Bash가있는 데스크톱에서 ' & ', nohup, disown, 또는 프로세스를 시작하고 자체적으로 완전히 실행되도록하기 위해 세 가지를 조합합니까?

Xubuntu 16.04에서 로컬 또는 ssh를 통해이 네 가지 명령을 실행하면 모두 똑같은 작업을 수행하는 것 같습니다.

export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally 
  1. gedit & 
  2. gedit & disown 
  3. nohup gedit 
  4. nohup gedit & disown 

아니요 gedit &gedit & disown의 차이를 확인하세요. 부모 터미널을 죽이거나 ssh 세션에서 로그 아웃하면 gedit는 두 시나리오 모두에서 “비 소유”됩니다.

2와 3의 경우 유일한 차이점은 명령 출력이 별도의 파일에 기록되고 다음과 같은 경우에도 해당 별도의 로그에 계속 기록된다는 것입니다. bg 프로세스를 생성 한 원래 셸 세션이 종료됩니다.

3과 4에 관해서는 기술적 인 차이가 있다는 것을 계속 읽고 있지만 왜 다른 것보다 하나를 선호하는지 전혀 이해할 수 없습니다.

어떤 것을 사용해야합니까? 튜토리얼과 Q &에 사용 된 네 가지 명령을 모두 보았습니다. 그리고 nohup과 disown의 기술적 차이점을 설명하는 몇 가지 훌륭한 답변에도 불구하고 필자가 사용해야하는 명확한 권장 사항 (로깅 목적이나 셸 호환성 제외)을 얻을 수없는 것 같습니다.

Comments

  • 셸에서 계속하려는 모든 경우에 &가 필요합니다 (프로그램 자체가 포크되지 않음). 파일 설명자를 닫고 자체 연결을 해제하는 프로그램에는 nohup이 필요하지 않을 수 있습니다 (즉, Gibt는 대부분의 GUI 응용 프로그램에 적용됨). disown을 사후 (nohup을 잊은 경우) 사용할 수 있으며 이전에 작성된대로 GUI 앱에는 필요하지 않습니다.

Answer

장시간 동안 실행할 스크립트를 실행해야 할 때 ssh 세션, 다음 중 하나를 원합니다.

  1. 네트워크가 끊어 지거나 랩톱을 챙기고 떠나도 작업이 계속되어야합니다. .

    a. 대화 형 입력없이 작업을 완료 할 수 있습니다.

     nohup do_my_stuff & 

    b. 작업은 stdin에서 내게 필요한 것이있을 수 있습니다. .

     man tmux history -w tmux do_my_stuff 
  2. 백그라운드 프로세스는 어떻게 든 현재 세션을 향상시키고 세션과 함께 죽어야합니다. 드문 경우입니다.

     enhance_my_session >>/tmp/enhance.$$.log 2>&1 & 
  3. 내 ssh 세션에서 일부 로그를 임의로 뱉어 내고 싶습니다. 잠깐, 뭐라고 요? 아니요, 절대 원하지 않습니다. 감사합니다. 당신은 disown.

  4. 내가 원하지 않는 또 다른 것 : 변환 프로세스를 완전히 분리 된 데몬으로 전환하지만 다음 부팅시 자동으로 시작하지 마십시오. 시스템이 언제 재부팅되고 누가 재부팅 될지 예측할 수 없기 때문에 절대 원하지 않습니다.

답변

일반적으로 다음을 수행합니다.

  1. myprog & 내 현재 로그인 셸. 이것은 99 %의 경우에 적합합니다 …

  2. nohup myprog > /my/path/output.txt & 쉘에서 무언가를 시작하지만 원하는 경우 나중에 로그 아웃합니다 (백그라운드 작업이 아직 실행되는 동안).

답변

사용자 쉘 종료와 터미널 중단을 구분해야합니다.

  1. 쉘은 중단 신호를 받으면 알려진 모든 작업 (자녀는 제외)을 종료합니다.
  2. 터미널이 종료됩니다. 모든 것이 제어 터미널이었습니다.

일반적으로 최상의 솔루션 (사용자 수준에서) IMHO는 screen입니다.

작업이 사용자와 관련된 것이 아니라 시스템과 관련된 경우 수동으로 시작하는 대신 systemd 서비스로 만들 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다