linux常用c函数:信号处理篇

来源:Linux认证    发布时间:2012-11-10    Linux认证视频    评论

  alarm(设置信号传送闹钟)

  相关函数  signal,sleep

  表头文件  #include<unistd.h>

  定义函数  unsigned int alarm(unsigned int seconds);

  函数说明  alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。

  返回值  返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。

  范例  #include<unistd.h>

  #include<signal.h>

  void handler() {

  printf(“hello/n”);

  }

  main()

  {

  int i;

  signal(SIGALRM,handler);

  alarm(5);

  for(i=1;i<7;i++){

  printf(“sleep %d .../n”,i);

  sleep(1);

  }

  }

  执行  sleep 1 ...

  sleep 2 ...

  sleep 3 ...

  sleep 4 ...

  sleep 5 ...

  hello

  sleep 6 ...

  kill(传送信号给指定的进程)

  相关函数  raise,signal

  表头文件  #include<sys/types.h>

  #include<signal.h>

  定义函数  int kill(pid_t pid,int sig);

  函数说明  kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:

  pid>0 将信号传给进程识别码为pid 的进程。

  pid=0 将信号传给和目前进程相同进程组的所有进程

  pid=-1 将信号广播传送给系统内所有的进程

  pid<0 将信号传给进程组识别码为pid绝对值的所有进程

  参数sig代表的信号编号可参考附录D

  返回值  执行成功则返回0,如果有错误则返回-1。

  错误代码  EINVAL 参数sig 不合法

  ESRCH 参数pid 所指定的进程或进程组不存在

  EPERM 权限不够无法传送信号给指定进程

  范例  #include<unistd.h>

  #include<signal.h>

  #include<sys/types.h>

  #include<sys/wait.h>

  main()

  {

  pid_t pid;

  int status;

  if(!(pid= fork())){

  printf(“Hi I am child process!/n”);

  sleep(10);

  return;

  }

  else{

  printf(“send signal to child process (%d) /n”,pid);

  sleep(1);

  kill(pid ,SIGABRT);

  wait(&status);

  if(WIFSIGNALED(status))

  printf(“chile process receive signal %d/n”,WTERMSIG(status));

  }

  }

  执行  sen signal to child process(3170)

  Hi I am child process!

  child process receive signal 6

  pause(让进程暂停直到信号出现)

  相关函数  kill,signal,sleep

  表头文件  #include<unistd.h>

  定义函数  int pause(void);

  函数说明  pause()会令目前的进程暂停(进入睡眠状态),直到被信号(signal)所中断。

  返回值  只返回-1。

  错误代码  EINTR 有信号到达中断了此函数。

  sigaction(查询或设置信号处理方式)

  相关函数  signal,sigprocmask,sigpending,sigsuspend

  表头文件  #include<signal.h>

  定义函数  int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);

  函数说明  sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。

上一页12345下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答