1.信号
1.pause
int pause(void);
功能:
让进程睡眠,直到接收到信号(捕捉)才能继续向下执行
2.alarm
unsigned int alarm(unsigned int seconds);
功能:
定时seconds秒后给调用进程发送SIGALRM信号
参数:
seconds:定时的秒数
返回值:
成功返回之前设定剩余的秒数
eg:alarm和pause的用法
// ************************************************* alarm的用法
void handler(int signo)
{printf("信号来了!\n");alarm(5); //每次执行完重新延迟五秒发送信号return;
}int main(void)
{int i = 0;signal(SIGALRM,handler); //将SIGALRM(定时结束信号)信号,捕捉自定义为执行handler函数alarm(5); //延迟五秒给程序发送SIGALRM(缺省的默认指令,发送定时结束的信号)while(1){for(i=5;i>0;--i){printf("%d\n",i);sleep(1);}}return 0;
}
// ************************************************************** 实现sleep的功能
void handler(int signo)
{return; //相当于收到信号后啥也不干,“忽略”信号
}int Mysleep(int seconds)
{signal(SIGALRM,handler); // 将计时结束的信号自定义为执行函数handleralarm(seconds); //seconds 秒后 内核发送计时结束的信号,没有程序等待的作用pause(); //挂起,到接收信号(SIGALRM),开始程序运行,防止函数直接结束掉signal(SIGALRM,SIG_DFL); //将信号处理为系统默认的方式,用完要改回去防止后面用的时候出错return 0;
}int main(void)
{printf("sleep up!\n");Mysleep(5);printf("sleep down!\n");return 0;
}
3.kill
int kill(pid_t pid, int sig);
功能:
给PID对应的进程发送sig信号
参数:
pid:进程ID号
sig:信号的编号
返回值:
成功返回0
失败返回-1
eg:kill的用法
//***************************************************************** kill的用法int main(void)
{pid_t pid;pid = fork();if(pid == -1){perror("fail to fork");return -1;}if(pid == 0){while(1){printf("子程序还活着!!!\n");sleep(1); //间隔一秒确认程序状态}}else if(pid > 0){sleep(3); //延迟三秒‘杀死’kill(pid,SIGKILL);}
}