나는 그들 각각 (SIGTSTP, SIGCHLD)에 대해 견인 핸들러를 가지고있다. 문제는 SIGTSTP를 사용하여 프로세스를 멈추었을 때 SIGCHLD의 핸들러 기능 역시 실행된다는 것이다. 이것을 막기 위해 무엇을해야합니까?
SIGTSTP와 SIGCHLD 사이의 관계
신호 처리기 :
void signalHandler(int signal) {
int pid, cstatus;
if (signal == SIGCHLD) {
susp = 0;
pid = waitpid(-1, &cstatus, WNOHANG);
printf("[[child %d terminated]]\n", pid);
DelPID(&JobsList, pid);
}
}
void ctrlZsignal(int signal){
kill(Susp_Bg_Pid, SIGTSTP);
susp = 0;
printf("\nchild %d suspended\n", Susp_Bg_Pid);
}
중지 된 프로세스 아이디를 저장하는 데 사용 Susp_Bg_Pid.
susp는 일시 중단되었거나 중지 된 경우 상위 프로세스의 "스매시"상태를 나타냅니다.
오른쪽 플래그를 사용하면 일시 중지 된 아이와 수신 한 신호를 알 수 있습니다. 따라서 실제 이탈을 감지 할뿐만 아니라 일시 중지/다시 시작을위한 조치를 취할 수도 있습니다. –