zoukankan      html  css  js  c++  java
  • pause函数

    pause函数

           调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。

        int pause(void);     返回值:-1 并设置errno为EINTR

           返回值:

    ① 如果信号的默认处理动作是终止进程,则进程终止,pause函数么有机会返回。

                  ② 如果信号的默认处理动作是忽略,进程继续处于挂起状态,pause函数不返回。

                  ③ 如果信号的处理动作是捕捉,则【调用完信号处理函数之后,pause返回-1】

                     errno设置为EINTR,表示“被信号中断”。想想我们还有哪个函数只有出错返回值。

                  ④ pause收到的信号不能被屏蔽,如果被屏蔽,那么pause就不能被唤醒。

    练习:使用pause和alarm来实现sleep函数。                                                                                 【mysleep.c】

    注意,unslept = alarm(0)的用法。

    例如:睡觉,alarm(10)闹铃。  

    正常: 10后闹铃将我唤醒,这时额外设置alarm(0)取消闹铃,不会出错。

                  异常: 5分钟,被其他事物吵醒,alarm(0)取消闹铃防止打扰。

    /***
    pause.c
    ***/
    #include<stdio.h>
    #include<errno.h>
    #include<unistd.h>
    #include<signal.h>
    #include<stdlib.h>
    
    void catch_sigalrm(int signo)
    {
        ;
    }
    
    unsigned int mysleep(unsigned int seconds)
    {
        int ret;
        struct sigaction act,oldact;
        
        act.sa_handler = catch_sigalrm;
        sigemptyset(&act.sa_mask);
        act.sa_flags = 0;
        
        ret = sigaction(SIGALRM,&act,&oldact);
        if(-1 == ret)
        {
            perror("sigaction error");
            exit(1);
        }
    
        alarm(seconds);
        ret = pause();
        if(-1 == ret && errno == EINTR)
        {
            printf("pauses success
    ");
        }
    
        ret =alarm(0);
        sigaction(SIGALRM,&oldact,NULL);
        
        return ret;
    }
    
    int main()
    {
        while(1)
        {
            mysleep(3);
            printf("-----------
    ");
        }
        return 0;
    }
  • 相关阅读:
    Spring MVC的常用注解(一)
    Spring MVC接口实例
    MVC模式和Spring MVC初识
    Hbase数据结构和shell操作
    Hbase的安装和配置
    ZooKeeper安装、配置和使用
    hadoop的安装和配置
    VMware Workstation安装CentOS 7和开发环境
    Java基础-内部类
    SSM三大框架整合
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11334979.html
Copyright © 2011-2022 走看看