歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> linux常用c函數:信號處理篇(一)

linux常用c函數:信號處理篇(一)

日期:2017/2/25 10:38:51   编辑: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以外的所有信號。

Copyright © Linux教程網 All Rights Reserved