linux 信号发送简单用法

http://blog.chinaunix.net/uid-20528014-id-333569.html

http://zhidao.baidu.com/link?url=YGCDevofDnxZdkMjmIdhfhiELE-usQ-6xUGNDnsdhwu82UASqylJU7WzMzQ6sZXVRJVUQ8xv1J0kLxmWkx3GEa

1.   信号基本概念

信号(signal)是linux进程通讯中唯一的异步通讯方式。

信号从软件层次上看是对中断机制的一种模拟。一个进程收到信号时的处理方式与CPU收到中断请求时的处理方式一样。收到信号的进程会跳入信号处理函数,执行完后再跳回原来的位置继续执行。


2.  信号安装

信号的安装函数有两个:signal()sigaction()signal()常用于非实时信号;sigaction()常用于实时信号,它有更多的选项设置,最重要的是可以为实时信号安装带参数的回调。

#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
 
void new_op(int,siginfo_t*,void*);
 
int main(int argc,char**argv)
{
    struct sigaction act;
    int sig;
   
    sig = atoi(argv[1]);
    sigemptyset(&act.sa_mask);
    act.sa_flags = SA_SIGINFO;
    act.sa_sigaction = new_op;
    sigaction(sig, &act, NULL);
   
    while(1)
    {
        printf("hello world\n");
        sleep(2);
    }
}
void new_op(int signum,siginfo_t *info,void *myact)
{
    printf("***** receive signal %d ******\n", signum);
    sleep(5);
}


执行:

Ø  启动程序:“./a.out 38&  (注:&作用是程序在新进程中执行)

Ø  使用ps查看进程PID

Ø  执行“kill –s 38 pid (注:pid为上面用ps得到的pid)或者 killall -38 procname

Ø  会打印“***** receive signal %d ******\n


3.  信号发送

kill 等函数


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值