nohup 없이 bash에서 프로그램/프로세스가 시작되면 쉘/터미널이 닫힌 후에도 나중에 프로그램을 실행할 수 있습니까?

nohup 없이 bash에서 프로그램/프로세스가 시작되면 쉘/터미널이 닫힌 후에도 나중에 프로그램을 실행할 수 있습니까?

bash에서 프로그램/프로세스가 시작될 때아니요 nohup, 나중에(추가 작업을 수행하여) 쉘/터미널이 닫힌 후에도 이 프로그램을 실행하는 것이 가능합니까?
여기에 훌륭한 토론이 있습니다.nohup, disown, &의 차이점관심 있는 사람이 있다면 살펴보세요.

이 질문에서는 프로그램이 nohup 없이 시작될 때 관찰한 내용을 공유하고 싶습니다.

편집 - 원래 질문을 무시하십시오. 예, disown프로세스를 실행한 후 터미널/셸을 종료하는 것은 중요하지 않은 것 같습니다. 프로세스가 실행 중인 것 같습니다. 원래 터미널이 닫힌 후에도 ps -ef | grep java프로세스가 실행되는 것을 볼 수 있습니다 .

답변1

위에서 설명한 제한 사항으로 인해 터미널을 닫은 후에도 프로세스를 계속 실행할 수 있는 방법이 없습니다. 왜? 프로세스 에도 불구하고 disown터미널 내의 쉘은 여전히 java -jar myapp.jar​​프로세스의 상위입니다. disown쉘 프로세스는 에 HUP 신호를 보내지 말라고 지시 하지만 java터미널을 닫으면 bash 프로세스가 먼저 종료되고 쉘의 상위 프로세스가 해당 java프로세스를 상속합니다. 그런 다음 이 새로운 상위 프로세스는 상속된 모든 프로세스를 정리하기 위해 HUP tp를 보내며, java고급 기능만 사용하면 프로세스가 HUP 신호를 수신하고 그에 따라 조치를 취하는 것을 방지할 수 있습니다.nohupjava

답변2

질문하신 이유는 명령을 직접 시작했고 로그아웃 후에도 계속 실행되기를 원하며 여전히 명령을 제어할 수 있기를 원하기 때문이라고 생각합니다.

여러 가지 요소가 프로세스의 수명 주기를 제어합니다. 가장 중요한 두 가지 측면은 상위 프로세스(또는 프로세스 그룹)와 제어 터미널입니다.

대화형 명령을 실행하면 쉽게 백그라운드로 보낼 수 있습니다("ctrl+z"로 중지하고 "bg"로 백그라운드에서 계속).

이제 까다로운 부분이 나옵니다. 프로세스를 다른 프로세스 그룹(및 터미널)에 연결하는 것입니다. 터미널의 경우 일반적으로 "screen"을 사용하고 터미널을 다시 연결합니다.https://github.com/nelhage/reptyr

물론 이 도구에 대한 대안도 있습니다. 이 작업 후에 모든 프로세스가 제대로 작동하는 것은 아니므로 마일리지가 다를 수 있다는 점에 유의하는 것도 중요합니다.

관련 정보