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;
    }
  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11334979.html
Copyright © 2011-2022 走看看