특정 프로세스에서 타 프로레스 실행시에 타이머나 알람이 동작하지 않습니다.
글쓴이: dunpeal / 작성시간: 목, 2016/05/26 - 9:44오전
안녕하세요.
그동안 검색으로만 보다가 도저히 풀리지 않는 문제가 있어서 오늘 가입해서 처음 글 올립니다.^^
A 와 B 두개의 프로세스가 있는데요.(B 는 A 에서 최초 실행)
서로 종료 된걸 캐치하면 system 함수로 재실행해주도록 처리되어있습니다.
둘 다 알람을 이용한 타이머 처리가 되어있는데,
A 에서 B 를 실행해주면 B 에 구현되어있는 알람이 잘 동작을 하는데
B 에서 A 를 실행해주면 A 의 알람이 등록은 되는데 동작하지 않습니다.
둘의 차이점이 뭔가해서 프로세스 정보를 찍어보니
A 는 Flag 값이 4이고
B 는 Flag 값이 0이어서 이부분이 의심이 갑니다.
그런데 왜 A 와 B 의 Flag 가 다른지 모르겠고,
B 의 Flag 를 4로 어떻게 바꿔야할지도 모르겠습니다.
둘의 파일권한이나 소유자는 동일하게 되어있는데요.
그럼 의견부탁드립니다.
Forums:
질문이 너무 두리 뭉실해서 잘 모르겠습니다. -
질문이 너무 두리 뭉실해서 잘 모르겠습니다.
- B는 A 에서 최초 실행이 무슨 말인지 모르겠습니다. fork() 인가요?
- 종료된걸 캐치 한다니, SIG** 을 이용하는 건가요?
부모-자식관계는 당연히 비 대칭관계라서, wait() 군의 함수들은 "부모"가 "자식"을 기다리지 반대는 안됩니다.(아마도)
저라면 제 3의 프로세스 C에게 A,B를 등록하고,
C에서 감지하게 되면(파이프로 구현해서 파이프가 깨지면 호출되는 식으로. select()등으로 판별 가능하겠죠)
A,B를 다시 실행하도록 하겠습니다.
fork() 는 아니구요.B 가 제 3의
fork() 는 아니구요.
B 가 제 3의 프로세스인데
A가 실행되고 나서 A 코드내에서 B 를 실행해줍니다.
B 에서 A 가 종료되었는지여부는 아래와같이 popen 으로 확인하고 있습니다.
popen("ps -ef|grep -w A |grep -v grep|awk '{print $2}'","r");
해당 값이 널이면 B 코드내에서 A 경로로 A 를 실행을 해줍니다.
이경우 A 의 타이머가 미동작합니다.
B를 A 코드 내에서 실행하지 않고, A 실행하듯이
B를 A 코드 내에서 실행하지 않고,
A 실행하듯이 .sh 파일내에서 A 실행할때 같이 B 도 실행해주니 문제는 해소가 되었습니다.
한가지 의문점은 여전히 남네요.
코드내에서 실행해준 프로세스에서 다른 프로세스를 실행시켜주면 타이머가 안도는 원인은 여전히 궁금하군요.
댓글 달기