程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C說話中的wait()函數和waitpid()函數

詳解C說話中的wait()函數和waitpid()函數

編輯:關於C++

詳解C說話中的wait()函數和waitpid()函數。本站提示廣大學習愛好者:(詳解C說話中的wait()函數和waitpid()函數)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C說話中的wait()函數和waitpid()函數正文


C說話wait()函數:停止(中止)過程函數(經常使用)
頭文件:

#include <sys/types.h>  #include <sys/wait.h>

界說函數:

pid_t wait (int * status);

函數解釋:wait()會臨時停滯今朝過程的履行, 直到有旌旗燈號離開或子過程停止. 假如在挪用wait()時子過程曾經停止, 則wait()會立刻前往子過程停止狀況值. 子過程的停止狀況值會由參數status 前往, 而子過程的過程辨認碼也會一快前往. 假如不在乎停止狀況值, 則參數 status 可以設成NULL. 子過程的停止狀況值請參考waitpid().

前往值:假如履行勝利則前往子過程辨認碼(PID), 假如有毛病產生則前往-1. 掉敗緣由存於errno 中.

典范

#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
main()
{
  pid_t pid;
  int status, i;
  if(fork() == 0)
  {
    printf("This is the child process. pid =%d\n", getpid());
    exit(5);
   }
  else
  {
    sleep(1);
    printf("This is the parent process, wait for child...\n";
    pid = wait(&status);
    i = WEXITSTATUS(status);
    printf("child's pid =%d . exit status=^d\n", pid, i);
  }
}

履行:

This is the child process. pid=1501
This is the parent process, wait for child...
child's pid =1501, exit status =5

C說話waitpid()函數:中止(停止)過程函數(或期待子過程中止)
頭文件:

#include <sys/types.h>  #include <sys/wait.h>

界說函數:

pid_t waitpid(pid_t pid, int * status, int options);

函數解釋:waitpid()會臨時停滯今朝過程的履行, 直到有旌旗燈號離開或子過程停止. 假如在挪用wait()時子過程曾經停止, 則wait()會立刻前往子過程停止狀況值. 子過程的停止狀況值會由參數status 前往, 而子過程的過程辨認碼也會一快前往. 假如不在乎停止狀況值, 則參數status 可以設成NULL. 參數pid 為欲期待的子過程辨認碼, 其他數值意義以下:

1、pid<-1 期待過程組辨認碼為pid 相對值的任何子過程.
2、pid=-1 期待任何子過程, 相當於wait().
3、pid=0 期待過程組辨認碼與今朝過程雷同的任何子過程.
4、pid>0 期待任何子過程辨認碼為pid 的子過程.

參數option 可認為0 或上面的OR 組合:

WNOHANG:假如沒有任何曾經停止的子過程則立時前往, 不予以期待.
WUNTRACED:假如子過程進入暫停履行情形則立時前往, 但停止狀況不予以理睬. 子過程的停止狀況前往後存於status, 底下有幾個宏可辨別停止情形
WIFEXITED(status):假如子過程正常停止則為非0 值.
WEXITSTATUS(status):獲得子過程exit()前往的停止代碼, 普通會先用WIFEXITED 來斷定能否正常停止能力應用此宏.
WIFSIGNALED(status):假如子過程是由於旌旗燈號而停止則此宏值為真
WTERMSIG(status):獲得子過程因旌旗燈號而中斷的旌旗燈號代碼, 普通會先用WIFSIGNALED 來斷定後才應用此宏.
WIFSTOPPED(status):假如子過程處於暫停履行情形則此宏值為真. 普通只要應用WUNTRACED時才會有此情形.
WSTOPSIG(status):獲得激發子過程暫停的旌旗燈號代碼, 普通會先用WIFSTOPPED 來斷定後才應用此宏.

前往值:假如履行勝利則前往子過程辨認碼(PID), 假如有毛病產生則前往-1. 掉敗緣由存於errno 中.

典范:參考wait().

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved