2014-12-01 2 views
0

Linux에서 프로그램을 종료하기 전에 시스템이 다시 시작되고 있음을 감지하고 싶습니다. /var/run/utmp 파일을 사용하여 런레벨을 감지하고 변경 사항을 적용했지만 시스템에 신호가 오기 전에 시스템이 종료 된 것 같습니다. runinvel을 telinit 명령으로 설정하면 종료를 알 수 있지만 우분투의 오른쪽 상단 모서리에있는 버튼으로 다시 시작하면 catch하지 않습니다.Linux에서 프로그램을 종료하기 전에 다시 시작하는 방법

어떻게 할 수 있습니까?

+2

일반적으로 재시작하는 것은 프로세스를 SIGTERM으로 보냅니다. 왜 그걸 잡지 못하니? [signal (7)] (http://man7.org/linux/manage/man7/signal.7.html) –

+0

을 참조하십시오. 상자에서 실행되는 프로그램이 중단되는 이유를 아는 것이 귀하의 비즈니스이므로, 네가 가지고 있다면 상태를 저장하고 두 경우 모두 종료하고 싶지 않니? –

답변

3

신호와 을 빠른 시간에으로 저장하고 실행 한 다음 종료하십시오. 잡을 수없는 SIGKILL을 얻기까지 약 10 초 가량 걸립니다. 강제 종료됩니다.

시스템이 올바른 종료를 허용하기 위해 SIGTERM을 보내지 않으면 시스템을 적절한 것으로 변경하십시오. 이것이 표준 방법입니다.

신호 처리에 대해서는 man 7 signalman 3 sigaction을 참조하십시오.

는 시스템이 재부팅되는 경우 나 표준 방법을 알고하지 않습니다

(주 확인하거나하지, 나는 그런 일이 존재한다. 그러나 위에서 언급 한 바와 같이 생각하지 않는다, 적절한 시스템은 당신에게 SIGTERM을 보낼 것이다 하드 재부팅은 배제되었으므로 전원 코드를 당기는 것과 거의 같지 않습니다.)

+0

당신은 sigterm을 잡아 당긴 다음 runlevel을 확인하겠습니까? –

+0

@JaniBaramidze 시스템 재부팅 여부를 확인하는 표준 방법을 모르겠습니다. 예를 들어 systemd를 실행 한 이후부터는 시스템에 런레벨이 없습니다. 'SIGTERM'을 잡아 내면 재부팅 문제를 해결하고, 예를 들어 프로세스 매니저가 다른 어떤 이유에서든 당신을 셧다운시키고 싶을 때 적절한 셧다운을 도입 할 수있다. – Jite

+0

@JaniBaramidze 왜 "재부팅 전"종료와 "정기 종료"를 분리해야합니까? – Jite

관련 문제