歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

Linux進程的阻塞與非阻塞

首先創建一個子進程,接著讓其等待5秒,接下來對父進程應用WAITPID函數等待子進程的退出,父進程每隔1秒判斷一次。

  源碼來自華清遠見:

  #include<sys/types.h>

  #include<sys/wait.h>

  #include<unistd.h>

  #include<stdio.h>

  #include<stdlib.h>

  int main()

  {

  pid_t pc, pr;

  //創建子進程

  pc = fork();

  if(pc < 0)

  {

  printf("error fork!\n");

  }

  else if(pc == 0)

  {

  sleep(5);

  exit(0);

  }

  else

  {

  do{//循環測試是否子進程退出

  pr = waitpid(pc, NULL, WNOHANG);//非阻塞

  //pr =waitpid(pc, NULL, 0);//阻塞

  if(pr == 0)

  {

  printf("the child process has not exited!\n");

  sleep(1);

  }

  }while(pr == 0);

  if(pr == pc)

  {

  printf("get child exit code: %d\n", pr);

  }

  else

  {

  printf("some error occured.\n");

  }

  }

  }

  注:

  從以上實驗可以看出兩個概念的區別:

  阻塞操作是指在沒有執行設備操作時,如果沒有獲得資源,則進程掛起,直到滿足可操作的條件再進行操作。非阻塞操作的進程在不能進行設備操作時,並不掛起

Copyright © Linux教程網 All Rights Reserved