码迷,mamicode.com
首页 > 其他好文 > 详细

[学习笔记]信号发送

时间:2015-04-22 17:48:25      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

kill函数
Kill基本用法
发送信号的函数有kill和raise
区别:kill既可以向自身发送信号,也可以向其他进程发送信号;
raise函数向进程自身发送信号。
Int kill(pid_t pid, int siq) 
int raise(int signo)

Int kill(pid_t pid, int siq)
参数组合情况解释:
kill(pid_t pid, int siq)
    pid>0 将信号sig发给pid进程
    pid=0 将信号sig发给同组进程
    pid=-1 将信号sig发送给所有进程,调用者进程有权限发送的每一个进程(除了1号进程之外,还有它自身)
    pid<-1 将信号sig发送给进程组是pid(绝对值)的每一个进程
实验:    
    //子进程向父进程发送信号
    //子进程向同组进程发送信号 (getpgrp()函数获取进程组pid)
结论:注意,如果在fork之前安装信号,则子进程可以继承信号。
kill和sleep在一起
子进程向父进程发送信号
sleep函数几点说明
1)sleep函数作用,让进程睡眠。
2)能被信号打断,然后处理信号函数以后,就不再睡眠了。直接向下执行代码
3)sleep函数的返回值,是剩余的秒数

raise函数
raise
?    raise
?    给自己发送信号。raise(sig)等价于kill(getpid(), sig);
?    killpg
?    给进程组发送信号。killpg(pgrp, sig)等价于kill(-pgrp, sig);
?    sigqueue
?    给进程发送信号,支持排队,可以附带额外数据信息。
pause函数
pause()函数
?    将进程置为可中断睡眠状态。然后它调用内核函数schedule(),使linux进程调度器找到另一个进程来运行。
?    pause使调用者进程挂起,直到一个信号被捕获
alarm函数
alarm函数,设置一个闹钟延迟发送信号
告诉linux内核n秒中以后,发送SIGALRM信号;;
手册描述:
NAME
       alarm - set an alarm clock for delivery of a signal
SYNOPSIS
       #include <unistd.h>
       unsigned int alarm(unsigned int seconds);
DESCRIPTION
       alarm() arranges for a SIGALRM signal to be delivered to the process in seconds seconds.
       If seconds is zero, no new alarm() is scheduled.
       In any event any previously set alarm() is cancelled.
实验1:手工发送信号alarm信号实践
kill -ALRM 21333
kill -14 213333
kill -SIGALRM 213333
命令发送信号实践
kill -alram ` ps -aux | grep 01aram | grep -v vi | awk {print $2} ` 
编程实践
void  myhandle(int num)
{
    printf("recv signal id num : %d \n", num);
    //kill -alram ` ps -aux | grep 01aram | grep -v vi | awk ‘{print $2}‘ ` 
    alarm(1);
}

int main(void)
{
    printf("main ....begin\n");
    //注册信号处理函数
    if (signal(SIGALRM, myhandle) == SIG_ERR)
    {
        perror("func signal err\n");
        return 0;
    } 
    
    alarm(1);
    while(1) 
    {
        pause();
        printf("pause return\n");
    }
    return 0;
}

 

[学习笔记]信号发送

标签:

原文地址:http://www.cnblogs.com/shichuan/p/4448034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!