linux信号接口

例1:  kill()发信号

#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信号的间隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值