歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 一步一步學Linux C:關於進程等待

一步一步學Linux C:關於進程等待

日期:2017/3/1 10:26:33   编辑:Linux編程
  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <sys/wait.h>
  4. void check_exit(int status);
  5. main()
  6. {
  7. pid_t pid;
  8. int status;
  9. if((pid = fork()) < 0)
  10. {
  11. printf("fork error!!\n");
  12. exit(0);
  13. }
  14. else if(pid == 0)
  15. {
  16. printf("child process exit\n");
  17. exit(0);
  18. }
  19. else
  20. {
  21. if(wait(&status) != pid)
  22. {
  23. printf("wait error!!");
  24. exit(0);
  25. }
  26. check_exit(status);
  27. }
  28. }
  29. void check_exit(int status)
  30. {
  31. if(WIFEXITED(status))
  32. printf("eixt\n");
  33. else if(WIFSIGNALED(status))
  34. printf("killed by signal\n");
  35. else if(WIFSTOPPED(status))
  36. printf("stopped by signal\n");
  37. else if(WIFCONTINUED(status))
  38. printf("continued");
  39. }

等待進程改變其狀態。所有下面哪些調用都被用於等待子進程狀態的改 變,獲取狀態已改變的子進程信息。狀態改變可被認為是:1.子進程已終止。2.信號導致子進程停止執行。3.信號恢復子進程的執行。在子進程終止的情況 下,wait調用將允許系統釋放與子進程關聯的資源。如果不執行wait,終止了的子進程會停留在"zombie"狀態。

如果發現子進程改變了狀態,這些調用會立即返回。反之,調用會被阻塞直到子進程狀態改變,或者由信號處理句柄所中斷(假如系統調用沒有通過sigaction的SA_RESTART標志重啟動)。

wait 系統調用掛起當前執行中的進程,直到它的一個子進程終止。waitpid掛起當前進程的執行,直到指定的子進程狀態發生變化。默認,waitpid只等待 終止狀態的子進程,但這種行為可通過選項來改變。waitid系統調用對於等待哪個子進程狀態改變提供了更精確的控制。

Copyright © Linux教程網 All Rights Reserved