msgrcv 에 대해서
제가 msgrcv를 사용해서 큐메시지를 받는데 아래와 같이 받고 있습니다.
nRcvCount = msgrcv(nQueueId,
(struct msgbuf *)pQMsg, QUEUE_LEN_256, pQMsg->mtype, MSG_NOERROR);
Loop함수를 두어서 계속적으로 받고 있고 루프 위에는 signal( SIGTERM, IntCmd_ProcessExit);
시그널을 받아서 프로세스를 관리하는 관리프로세스한테 종료 메시지를 받습니다.
아래와 같이요
signal( SIGTERM, IntCmd_ProcessExit);
IntCmd_MainLoop();
즉 루프를 돌면서 블락킹 형태로 메시지큐를 읽고있다가 종료 시그널을 받으면 프로세스가 종료되는 루틴입니다.
근데 리눅스 혹은 sun에서는 잘 동작합니다. 문제는 aix인데요
aix에서는 큐에 메시지가 없으면 msgrcv가 블락킹이 되는 것 까지는 동일한데
signal( SIGTERM, IntCmd_ProcessExit); 시그널까지 못받습니다.
문제는 아닐거라 생각되는데 궁금해서요
그래서 msgrcv에 IPC_NOWAIT 옵션을 주면 블락킹이 안되니까
signal( SIGTERM, IntCmd_ProcessExit); 메시지를 받더라고요
이거 왜 이런걸까요?
AIX에 와서 여러개가 고민 되네요
제가 신호제어를 하고 있는데 신호제어기를 붙였을때 이상 동작 할까봐 걱정되서 올려 봅니다.
그럼 답변 꼭 부탁드립니다.
댓글 달기