linux中alarm函数和pause函数详解实例

alarm(time);执行之后告诉内核,让内核在time秒时间之后向该进程发送一个定时信号,然后该进程捕获该信号并处理;
pause()函数使该进程暂停让出CPU,但是该函数的暂停和前面的那个sleep函数的睡眠都是可被中断的睡眠,也就是说收到了中断信号之后再
重新执行该进程的时候就直接执行pause()和sleep()函数之后的语句;
下面是一个定时2秒的实例:

/*************************************************************************
	> File Name: alarm.c
	> Author:
	> Mail:
	> Created Time: 2015年11月20日 星期五 21时12分52秒
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

void sig_handler(int num)
{
    printf("receive the signal %d.\n", num);
}

int main()
{
    signal(SIGALRM, sig_handler);

    alarm(2);

    while(1){
        pause();
        printf("pause is over.\n");
    }

    exit(0);
}

如果我们想程序每2秒都定时一下,这样实现也很简单,我们在处理定时信号的函数中再次定时2秒;实例如下:

/*************************************************************************

	> File Name: alarm.c

	> Author: 

	> Mail: 

	> Created Time: 2015年11月20日 星期五 21时12分52秒

 ************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <signal.h>

void sig_handler(int num)

{

    printf("receive the signal %d.\n", num);

    alarm(2);

}

int main()

{

    signal(SIGALRM, sig_handler);

    alarm(2);

    while(1){

        pause();

        printf("pause is over.\n");

    }

    exit(0);

}

可以看出程序每隔2秒就会收到信号14,也就是SIGALRM信号;并且当处理完该信号之后,直接执行pause()函数下面的语句;说明pause()是可被中断的暂停;

时间: 2024-10-10 17:15:54

linux中alarm函数和pause函数详解实例的相关文章

Linux中history历史命令使用方法详解

在/etc/profile里添加如下: #History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if [ ! -d $HISTDIR ]; then         mkdir -p $HISTDIR         chmod 777 $HISTDIR fi export HISTSIZE=100000 export HISTFILE="$HISTDIR/${LOGNAME}.hist"

转:Linux中find命令-path -prune用法详解

在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录. 1. 在当前目录下查找所有txt后缀文件 find ./ -name *.txt 2.在当前目录下的dir0目录及子目录下查找txt

Linux中find命令-path -prune用法详解

摘自:http://www.cnblogs.com/hopeworld/archive/2011/04/08/2009252.html 在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录

Linux中文本搜索工具“grep”命令详解

人生中应该有两次冲动,一次是轰轰烈烈的爱情,一次是说走就走的旅行.我属于第三种,轰轰烈烈的辞职然后马不停蹄的参加了马哥的linux面授班,两周时间内对linux有了些初步的了解,与此同时,两周内八天课程中的各种定义.概念.原理.命令由于量大.琐碎,也着实给我们这些小白一个下马威,即使每天11点撤退也觉得时间不够用.鉴于对自己的负责和马哥的作业要求,特对文本搜索工具grep写些使用指南,其中可能会有描述不确切或有偏颇之处,望及时指正. 开始--. 首先,要说一下grep是什么,用在什么地方. gr

Linux中的文件和目录结构详解

当在使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc.usr.var.bin ... ... 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件.文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为 树形结构. 文件系统的是用来组织和排列文件存取的,所以它是可见的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构:比如操作系统安装在一个文件系统中,它表现为由/ 起始的树

linux中pip安装步骤与使用详解

pip类似RedHat里面的yum,安装软件非常方便.本节详细介绍pip的安装.以及使用方法,希望文章对各位了解pip的安装与使用带来帮助. 1.pip下载安装1.1 pip下载  代码如下 复制代码 # wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate 1.2 pip安装  代

Linux中fork,vfork和clone详解(区别与联系)

fork,vfork,clone Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程,也叫线程,是共享资源的进程) 系统调用 描述 fork fork创造的子进程是父进程的完整副本,复制了父亲进程的资源,包括内存的内容task_struct内容 vfork vfork创建的子进程与父进程共享数据段,而且由vfork()创建的子进程将先于父进程

【转】Linux中history历史命令使用方法详解

原文网址:http://os.51cto.com/art/201205/335040.htm 当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升.事实上,一旦你掌握了我在下面给出的15个有关Linux history历史命令的例子,你就会发现使用history历史命令行将更有乐趣. 1.使用HISTTIMEFORMAT在历史中显示TIMESTAMP 通常情况下,当你在命令行中键入history时,终端中将显示你刚输入的命令及其

linux中的磁盘的MBR记录详解

在硬盘中,硬盘的0柱面0磁头第一个1扇区称为主引导扇区,也叫主引导记录-MBR(main boot record),其中MBR是以下三个部分组成 1.Bootloader,主引导程序---446个字节 2.Dpt(Disk Partition table),硬盘分区表---64个字节 3.扇区结尾标志(55aa)--2个字节 总共512字节,前446个字节是主引导记录,是bios加电自检后要运行的代码,中间64字节为分区表. 简单的来说MBR=bootloader+dpt(64)+结尾标志(55

Linux中/etc/passwd 和 /etc/shadows 详解

linux操作系统上的用户如果需要登录主机,当其输入用户名和密码之后: 首先在/etc/passwd文件中查找是否有你的账号,如果没有无法登录,如果有的话将该用户的UID和GID读出来,此外将此用户的shell设置也一并读出. 然后根据UID到/etc/shadow文件中去寻找相应用户的密码,如果匹配一致 进入shell控制的阶段. 下面我们详细解释这两个文件: 一:/etc/passwd [email protected]:~# cat /etc/passwd root:x:0:0:root: