sigaction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /* 设定信å·å¤„ç†å‡½æ•° */
act.sa_handler = NULL;
act.sa_sigaction = child_handler;
sigemptyset(&act.sa_mask);
act.sa_flags = SA_SIGINFO;
//sigaction(SIGCHLD, &act, NULL);
/**
*@brief 接å—退出信å·è€ŒåŽåˆ›å»ºæ–°çš„进程
*
*/
static void child_handler(int sig, siginfo_t *si, void *data)
{
int i;
pid_t *ptr;
//也许是processing进程
ptr = (pid_t *)pros_mem;
for( i = 0; i< pros_num; i++){
ptr += i;
if(*ptr == si->si_pid){
printf("processing process created\n");
creat_processes((char *)ptr, 1, processing);
return;
}
}
//也许是caching进程
ptr = (pid_t *)cach_mem;
for( i = 0; i< cach_num; i++){
ptr += i;
if(*ptr == si->si_pid){
printf("caching process created\n");
creat_processes((char *)ptr, 1, caching);
return;
}
}
}
|
Tags: signal
SIGCHLD如果忽略的è¯ï¼Œ 会ä¸ä¼šè°ƒç”¨é»˜è®¤çš„处ç†å‡½æ•°ï¼Œ 如果是的è¯ï¼Œ 我们å¯ä»¥é¦–先调用自己的处ç†å‡½æ•°ï¼Œ 然åŽé€šè¿‡é»˜è®¤çš„函数æ¥é‡Šæ”¾èµ„æº
é¿å…defunct进程, manual page: In the case of a terminated child, performing a wait allows the system to release the resources associated with the child;