백그라운드 프로세스가 간헐적으로 죽어가는 문제를 겪고있는 동료를 돕고있었습니다.
서버에 로그인하고 다음을 실행하여 백그라운드 프로세스를 시작하고 있음을 알았습니다.
su - <user> -c '<command>' &
"아하", 나는 외쳤다. "&"로 명령을 시작하면 제어 터미널을 종료 할 때 정지됩니다.이를 달성하려면 nohup과 같은 것을 사용해야합니다. 실제로이 프로세스는 tut tut 데몬으로 실행하는 것을 지원해야합니다. "
우리는 위의 명령을 테스트하여 요점을 보여주었습니다 ... 작동하는 것처럼 보입니다 : 명령으로 시작한 프로세스 가 위 명령을 실행 한 터미널을 종료했을 때 종료되지 않았습니다.
command 는 출력이 파일로 이동하는 사용자 정의 Python 스크립트입니다. 내가 알 수있는 한, 스크립트에는 기능과 같은 지능적인 "데모 니즈"가 없습니다. Wikipedia : Daemon (computing) : Creation 페이지에 나열된 데몬으로 실행하는 데 필요한 작업은 수행하지 않습니다 .
명령을 다음과 같이 실행하면 예상대로 작동합니다.
<command> &
exit
위의 경우 터미널을 종료하면 명령으로 시작된 백그라운드 프로세스가 종료됩니다.
내 질문은 이것입니다 :
터미널이 종료 될 때 프로세스가 종료되지 않도록하는 "su--c &"를 추가하면 어떻게됩니까? 제어 터미널, 표준 입력 및 출력 등에 대해 자세히 이해하고 싶습니다.
이 명령을 백그라운드 프로세스로 실행하려는 목표를 달성하기위한 합리적인 방법입니까? 왜 그렇지 않습니까?
회사 내에서 모범 사례를 전파하고 싶지만 권장 사항을 입증하고 백업 할 수 있어야합니다.
또한 정확히 무슨 일이 일어나고 있는지 이해하고 싶습니다.
chroot --userspec root:root / sh -c "exec some_forever_process" &
. 작업이 명시 적으로nohup
이전 또는disown
이후에 동일한 사용자로 실행 중 입니다. 따라서이 경우 신호가 종료시 어떻게 전달되지 않습니까?