Xubuntu 16.04에서 로컬 또는 ssh를 통해이 네 가지 명령을 실행하면 모두 똑같은 작업을 수행하는 것 같습니다.
export DISPLAY=:0.0 #not necessary unless you have logged in over ssh instead of starting a terminal locally
-
gedit &
-
gedit & disown
-
nohup gedit
-
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
세션, 다음 중 하나를 원합니다.
-
네트워크가 끊어 지거나 랩톱을 챙기고 떠나도 작업이 계속되어야합니다. .
a. 대화 형 입력없이 작업을 완료 할 수 있습니다.
nohup do_my_stuff &
b. 작업은 stdin에서 내게 필요한 것이있을 수 있습니다. .
man tmux history -w tmux do_my_stuff
-
백그라운드 프로세스는 어떻게 든 현재 세션을 향상시키고 세션과 함께 죽어야합니다. 드문 경우입니다.
enhance_my_session >>/tmp/enhance.$$.log 2>&1 &
-
내 ssh 세션에서 일부 로그를 임의로 뱉어 내고 싶습니다. 잠깐, 뭐라고 요? 아니요, 절대 원하지 않습니다. 감사합니다. 당신은
disown
. -
내가 원하지 않는 또 다른 것 : 변환 프로세스를 완전히 분리 된 데몬으로 전환하지만 다음 부팅시 자동으로 시작하지 마십시오. 시스템이 언제 재부팅되고 누가 재부팅 될지 예측할 수 없기 때문에 절대 원하지 않습니다.
답변
일반적으로 다음을 수행합니다.
-
myprog &
내 현재 로그인 셸. 이것은 99 %의 경우에 적합합니다 … -
nohup myprog > /my/path/output.txt &
쉘에서 무언가를 시작하지만 원하는 경우 나중에 로그 아웃합니다 (백그라운드 작업이 아직 실행되는 동안).
답변
사용자 쉘 종료와 터미널 중단을 구분해야합니다.
- 쉘은 중단 신호를 받으면 알려진 모든 작업 (자녀는 제외)을 종료합니다.
- 터미널이 종료됩니다. 모든 것이 제어 터미널이었습니다.
일반적으로 최상의 솔루션 (사용자 수준에서) IMHO는 screen
입니다.
작업이 사용자와 관련된 것이 아니라 시스템과 관련된 경우 수동으로 시작하는 대신 systemd 서비스로 만들 수 있습니다.