zoukankan      html  css  js  c++  java
  • Linux下实现mysleep并分析

    对于这个问题,我们首先可以想到的是使用pause()函数和alarm()函数进行组合,这样就可以实现sleep函数的作用。

    首先来看pause函数的作用

     接着来看SIGALRM信号(man 7 signal):

    由此我们可以看到SIGALRM默认的Action是Term。

     而Term的默认动作是终止进程。

    所以我们可以做如下实验,当我们没有信号捕捉的时候会发生什么样的情况?

    运行结果:

     此时并没有输出“after pause”,在程序执行的过程中,遇到pause程序被挂起之后,当2s之后,发来SIGALRM信号,由于没有重写SIGALRM信号的处理函数,所以系统默认终止该进程。

    我们再来看看,当有默认处理函数的时候:

     执行结果:

    这个时候可以看到,我们想要看到的效果成功了。

    在尝试一下其他方法(使用kill命令来发送SIGALRM信号):

    执行kill命令:

    运行结果:

     这个过程也就十分的清晰明了了,当然这里并没有使用比较复杂代码和深层次的探究。

    如果有错误,还请指正。

    源码:

    1 #include <unistd.h>
    2 #include <stdio.h>
    3 int main()
    4 { 
    5 alarm(2);                                                               
    6 printf("alarm start!
    ");
    7 pause();
    8 printf("after pause!
    ");
    9 }
     1 #include <unistd.h>
     2 #include <stdio.h>
     3 #include <signal.h>
     4 void fun(int id){
     5     printf("this is function 
    ");
     6 }
     7 int main()
     8 {
     9     signal(SIGALRM,fun);
    10     alarm(2);
    11     printf("alarm start!
    ");
    12     pause();
    13     printf("after pause!
    ");
    14 }   

    参考链接:

      https://segmentfault.com/q/1010000020536343

  • 相关阅读:
    puttytray
    让程序同时输出到文件与屏幕(tee)
    R将文件转化为矩阵
    gnome3下gedit乱码的解决方案
    perl随机打乱数组
    gnome 3.6
    google earth 离线下载地址
    wget 使用技巧
    运行pindel注意事项
    获取当前行号与列号
  • 原文地址:https://www.cnblogs.com/jianmoxiansheng-Guo/p/12867248.html
Copyright © 2011-2022 走看看