信号相关的接口
信号相关的接口
例1:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> #include <signal.h> int main(int argc, char *argv[]) { // argv[1]++; // kill(atoi(argv[2]),atoi(argv[1])); kill(-1,9); //return 0; //有前面的"kill(-1, 9)", 不会执行到这里来.
printf("i'm kill myself...\n");
raise(9); //自杀. 如果有前面的"kill(-1, 9)", 不会执行到这里来.
printf("Can`t goto here !!!\n");
return 0;
}
编译运行后, 桌面瞬间没有了. 立即进入登录界面.
例2: alarm(x)函数在指定x秒的时间后, 发SIGALRM信号
myalarm.c
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> #include <signal.h> void handler(int signum) { #if 1 time_t now; time(&now); puts(ctime(&now)); alarm(1); #endif } int main(int argc, char *argv[]) { signal(SIGALRM,handler); // alarm(atoi(argv[1])); // pause(); alarm(1); getchar(); return 0; }
编译链接执行. 输出如下:
每秒打印一次当前时间. 当注释掉handle()函数中的alarm(1)后, 只会打印一次. 即alarm()只会产生一次SIGALRM信号
例3: setitimer() 定时
mysetitimer.c
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <errno.h> #include <signal.h> #include <sys/time.h> void handler(int signum) { time_t now; time(&now); puts(ctime(&now)); } int main(int argc, char *argv[]) { struct itimerval val; signal(SIGALRM,handler); val.it_value.tv_sec = 5; val.it_value.tv_usec = 0; val.it_interval.tv_sec = 1; val.it_interval.tv_usec = 0; time_t now; time(&now); puts(ctime(&now)); setitimer(ITIMER_REAL,&val,NULL); getchar(); return 0; }
编译链接运行, 结果输出如下:
第一次打印后, 再过5秒才有第二次打印. 后续的都是每秒打印一次. 也即setitimer()可设定产生SIGALRM信号的时间间隔, 以及第二次与第一次产生SIGALRM信号的间隔