Linux下alarm,sigaction,pause

原创 2016年08月29日 11:33:33
/*
  #include <unistd.h>
  unsigned int alarm(unsigned int seconds);

  RETURN VALUE
       alarm() returns the number of seconds remaining  until  any  previously
       scheduled alarm was due to be delivered, or zero if there was no previ‐
       ously scheduled alarm.

*/


/*
#include<stdio.h>
#include <unistd.h>

unsigned int ret=0;
unsigned seconds=10;
int main(void)
{
	while(1)
	{
	 ret=alarm(seconds);
     sleep(5);	 
	 printf("ret=%d.\n",ret);	
	}

	return 0;
}

//结果值是0,5,5,5循环5
*/

//******************************************************
/*
#include<stdio.h>
#include <unistd.h>
#include <signal.h>

void func(int sig)
{
	if(sig==SIGALRM)
	{
		printf("alarm happened.\n");
	}
}

unsigned ret=-1;
struct sigaction act={0};

int main(void)
{
	
     act.sa_handler=func;
	 sigaction(SIGALRM,&act,NULL);
                     

	 ret=alarm(8);
	 sleep(1);
	 printf("1st,ret=%d.\n",ret);
	 
	 ret=alarm(5);
	 sleep(2);
	 printf("2st,ret=%d.\n",ret);
	 
	 ret=alarm(6);
	 sleep(3);
	 printf("3st,ret=%d.\n",ret);
	 
	 
	 pause();
	
	 return 0;
	
}

//结果为:1st,ret=0.
//        2st,ret=7.
//        3st,ret=3.
//        alarm happened
*/
//***************************************************************
/*
//sigaction+alarm模拟sleep
#include<stdio.h>
#include <signal.h>
#include <unistd.h>

void func(void)
{
	
}

void mysleep(unsigned int seconds)
{

	struct sigaction act={0};
	
	act.sa_handler= func;
	sigaction(SIGALRM,&act,NULL);
    
	alarm(seconds);
	pause();
}

int main(void)
{
	
	printf("before mysleep.\n");
	mysleep(5);
	printf("after mysleep.\n");
	
	return 0;
}

*/

1.pause函数的作用是让当前进程暂停运行,交出CPU给其他进程去执行。当前进程进入pause状态后,当前进程会表现为卡住,阻塞住,要退出pause状态,当前进程需要被信号唤醒。

2.sigaction

  #include <signal.h>
  int sigaction(int signum, const struct sigaction *act,
                     struct sigaction *oldact);

 The sigaction structure is defined as something like:
  struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
                             };






版权声明:本文为博主原创文章,未经博主允许不得转载。

linux信号处理之signal、sigaction、alarm、pause函数

信号相关的东西都在  /usr/include/singnal.h里 各种信号的定义的都在 /usr/include/i386-linux-gnu/bits/signum.h         3....

linux中的信号3——alarm、pause函数

以下内容源于朱有鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。 1、alarm函数 (1)内核以API形式提供的闹钟; (2)编程实践; 2、pause函数 (1)内核挂起 pause...

Linux环境编程之信号处理(三、利用alarm()和pause()函数实现sleep()函数)

sleep()是执行挂起一段时间,而alarm()函数是定时器,pause()函数则是挂起进程,当出现信号打断时,才会继续往前执行;         先来分享下alarm()函数,alarm()函数用...

[Linux C编程]信号发送捕捉kill() raise() alarm() pause()

信号概述 ● 信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。 ● 信号是异步的,一个进程不必通过任何操作来等待信号的到达...

linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)

信号:信号是unix中最古老的进程通信的一种方式,他是软件层次上对中断机制的模拟,是一种异步通信方式,信号可以实现用户空间进程和内核空间进程的交互,内核进程可以利用他通知用户空间进程发生了哪些系统事件...

Linux signal、alarm和pause函数

signal、alarm和pause函数 头文件和函数原型 #include typedef void (*sighandler_t)(int); sighandler_t sign...
  • CSLQM
  • CSLQM
  • 2016年11月19日 16:12
  • 295

linux进程通信---几个发送信号的函数(kill,raise,alarm,pause)

信号:信号是unix中最古老的进程通信的一种方式,他是软件层次上对中断机制的模拟,是一种异步通信方式,信号可以实现用户空间进程和内核空间进程的交互,内核进程可以利用他通知用户空间进程发生了哪些系统事件...

Linux进程间通信(四)---信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验

信号概述    ●  信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。    ●  信号是异步的,一个进程不必通过任何操作来等待信号的...

Linux下信号处理函数sigaction

//sigprof.c /************************************************************* FileName : si...
  • sunrier
  • sunrier
  • 2012年05月25日 13:13
  • 2551

信号的发送和捕捉函数(alarm、kill、raise、pause、 sleep、abort)

1.   alarm函数 (1) alarm函数原型              alarm(设置信号传送闹钟) 所需头文件 #include #...
  • ycc541
  • ycc541
  • 2015年03月19日 14:23
  • 360
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下alarm,sigaction,pause
举报原因:
原因补充:

(最多只允许输入30个字)