[일반](리눅스,C환경기본) 프로세스 죽이고 살릴때 중복 체크
for(....CNT...){ ...(앞부분- 'kill'포함) START_THE_PROCESS(char* pNAME); ... }
이런 식으로 for문을 돌려서, 죽은 프로세스를 다시 시작하는 루틴이 있습니다.
이름을 받아서 이미 running인지, 아닌지를 판단한 후에 시작하는 함수 START_THE_PROCESS에서 프로세스를 시작시킵니다.
문제는 for문에서 CNT인데요. 이 값의 크기 만큼 반복을 합니다.
해서 발생할 수 있는 문제는...
1. 아시겠지만, 프로세스가 바로 살아 나는 것이 아니기 때문에, 시스템마다 다르겠지만, START_THE_PROCESS에서 살린 후에 아직 RUNNING상태가 되기 전에 - 그러니까, 아직은 죽은 상태로 나오겠죠.- 다시 START_THE_PROCESS에 들어가게 되면 중복실행이 되는 경우가 있습니다.
2. 죽는 경우인데요. 생략했지만, START_THE_PROCESS함수 전에 조건문을 통과하면 kill로 프로세스를 죽이는 부분이 있습니다. 1의 상황과는 반대의 경우이지만, 여기서도 마찬 가지로 중복되서 죽이게 되는 경우가 발생할 수 있겠지요.
3. 프로세스가 기동이 된 후에, 프로그램이 프로세스 기동을 알아차리기 전에 지 할일 마치고, 죽는 경우 입니다.
4. 3번과는 반대의 경우로, kill로 죽였는데, 프로그램이 인식하기도 전에 잽싸게 다시 살아 나는 경우죠.
따지고 들자면 더 몇번이고 꼬인 경우가 있겠지만, 이 정도만 체크할 수 있다면 좋겠네요.
flag를 하나 둬서, 한번의 중복 실행은 막을 수 있었지만,
한번 두번이 아니라, 일정시간 체크가 가능하다거나, 뭐 이런 객관적이고 신빙성 있는 해결안이 필요하다더군요..
나름대로 생각한 바도 있긴 한데, KLDP의 고수님들의 해결법은 어떠신지요.
도움을 구해도 될까요? 평안하세요~~
[code:1]#!/bin/shwhile [ 1 	
이렇게 하심이 어떨지요.
MyAlive는 딱 한번만 서버의 상태를 체크해서 죽어있다면
서버를 실행하고 프로세서를 마치면 됩니다.
5분에 한번씩 체크하는 거죠
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
댓글 달기