2010-06-07 5 views
0

계속 실행해야하는 프로그램을 작성했습니다. 하지만 나쁜 프로그래머 때문에 매번 충돌이 일어납니다. 다른 프로그램에서 시청하고 충돌이 발생하면 다시 시작하는 방법이 있습니까?linux - 프로그램이 죽었는지 확인

+6

잘못된 프로그래밍으로 인해 충돌이 발생하면 더 나은 프로그래머가되고 연습을 해보고 프로그램과 디자인을 향상시켜 충돌을 일으키지 않도록하십시오. 그렇다면이 과정을 거치지 않아도됩니다. –

+2

불행히도, 상사는이 품질의 코드를 배송하는 것을 좋아합니다. –

+1

@DeSimone - 처음부터 올바르게하는 것보다 두 번하는 것이 더 저렴하기 때문입니다. – KevinDTimm

답변

2

당신이 나쁜 프로그래머라면, 시청 프로그래밍이 실패하지 않는다고 말하는 것입니다.) 그리고이 문제가 발생하지 않도록 더 잘해야합니다 (이런 이유로). 즉, 결국 다음과 같은 대답이 필요할 것입니다.

그러나 더 나은 방법이 없으면 정기적 인 간격으로 'ps'의 출력에서 ​​프로그램 이름을 찾는 cron 작업을 실행하십시오. 그리고 그 대답은 당신이 superuser.com

1

에서이 모든가

inittab MAN pages

봐 inittab 파일 리눅스로 수행 할 수 있습니다 타사 프로그램

에 대한 필요를 얻을 수

"리스폰"
0

Stackoverflow는 프로그래밍 사이트이므로 그러한 감시자를 구현하는 방법에 대한 개요를 설명하겠습니다.

먼저 알아야 할 것은 감시자가 본 프로그램을 직접 시작해야한다는 것입니다. forkexec을 사용하면됩니다.

다음은 프로그램 종료를 기다리는 것입니다. 특정 요구에 따라 대기 시스템 호출 (예 : wait, waitpid 또는 wait4)을 사용할 수 있습니다. SIGCHLD을 붙잡아서 자녀가 퇴장 할 때 비동기 적으로 정보를 얻을 수 있습니다 (상태를 얻으려면 wait로 전화해야합니다).

상태가되었으므로 매크로가 WIFSIGNALED 인 신호 때문에 프로세스가 중지되었는지 알 수 있습니다. 해당 매크로가 true를 반환하면 프로그램이 중단되고 다시 시작해야합니다. 다시 시작할 때 당신이 그것을 모니터링 다른 작업이있는 경우

1

당신은 여전히 ​​지속적으로 실행되지 않습니다 supervisord

http://supervisord.org/

+0

+1 Reddit에서 사용하기 때문에 반값이어야합니다. –

0

사용할 수 있습니다 ... 그것은 여전히 ​​아래로 짧은 시간이있을 것이다.

또한 네트워크 (또는 로컬) 서버 프로세스로 작동하는 경우 진행중인 요청에 대한 모든 상태가 손실됩니다. 나는 이것이 (물론 당신의 클라이언트가 내장 된 타임 아웃과 재시도를 가지고 있을지도 모른다) 괜찮 으면 좋겠다.

는 모든 영구 데이터를 저장하는 중간에있는 동안 프로세스가 충돌하는 경우가 수를하려는 경우 마지막으로, 나는

그러나 등은 반 작성된 파일에 대처하는 메커니즘을 가지고 희망 견고하고,이 모든 것들은 어쨌든 사실이어야합니다. 그래서 감독관과 같은 것을 안전하게 사용할 수 있습니다.

0

나는 내 프로그램과 서비스를 살펴보기 위해 Monit을 사용합니다.

관련 문제