linux 信号发送简单用法

来源:互联网 发布:js连接mysql数据库 编辑:程序博客网 时间:2024/06/05 17:13

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 等函数


0 0
原创粉丝点击