Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1056508
  • 博文数量: 573
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-28 16:21
文章分类

全部博文(573)

文章存档

2018年(3)

2016年(48)

2015年(522)

分类: LINUX

2015-12-02 16:16:58


点击(此处)折叠或打开

  1. #include <string.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <sys/wait.h>

  6. void printf_exit(int status);

  7. int main(int argc, char * * argv, char * * envp)
  8. {
  9.     int status;
  10.     pid_t pid = -1;
  11.     pid = fork();
  12.     if(pid == 0)
  13.     {
  14.         printf("子进程PID=[%d]\n", getpid());
  15.         exit(2);
  16.     }
  17.     else
  18.     {
  19.         printf("父进程PID=[%d]\n", getpid());
  20.         if(wait(&status) != pid) /*因为wait返回终止子进程的进程ID*/
  21.         {
  22.             printf("wait err!\n");
  23.         }
  24.         else
  25.         {
  26.             printf_exit(status);
  27.         }
  28.     }
  29.     printf("============================================================\n");
  30.     
  31.     pid = fork();
  32.     if(pid == 0)
  33.     {
  34.         printf("子进程PID=[%d]\n", getpid());
  35.         abort();
  36.     }
  37.     else
  38.     {
  39.         printf("父进程PID=[%d]\n", getpid());
  40.         if(wait(&status) != pid) /*因为wait返回终止子进程的进程ID*/
  41.         {
  42.             printf("wait err!\n");
  43.         }
  44.         else
  45.         {
  46.             printf_exit(status);
  47.         }
  48.     }
  49.     printf("============================================================\n");
  50.     
  51.     pid = fork();
  52.     if(pid == 0)
  53.     {
  54.         printf("子进程PID=[%d]\n", getpid());
  55.         status = status / 0;
  56.     }
  57.     else
  58.     {
  59.         printf("父进程PID=[%d]\n", getpid());
  60.         if(wait(&status) != pid) /*因为wait返回终止子进程的进程ID*/
  61.         {
  62.             printf("wait err!\n");
  63.         }
  64.         else
  65.         {
  66.             printf_exit(status);
  67.         }
  68.     }
  69.     printf("============================================================\n");
  70.     
  71.     return 0;
  72. }

  73. /********************************************************************
  74.  *功能:打印进程的退出状态
  75. *********************************************************************/
  76. void printf_exit(int status)
  77. {
  78.     printf("函数返回的整形终止状态字=[%d]\n", status);
  79.     if(WIFEXITED(status))
  80.     {
  81.         printf("子进程正常终止!\n");
  82.         printf("退出状态 = [%d]\n", WEXITSTATUS(status));
  83.     }
  84.     else if(WIFSIGNALED(status))
  85.     {
  86.         printf("子进程异常终止!\n");
  87.         printf("signal 号 = [%d]\n", WTERMSIG(status));
  88.         if(WCOREDUMP(status))
  89.         {
  90.             printf("产生core文件!\n");
  91.         }
  92.     }
  93.     else if(WIFSTOPPED(status))
  94.     {
  95.         printf("子进程暂停!\n");
  96.         printf("signal 号 = [%d]\n", WSTOPSIG(status));
  97.     }
  98.     
  99. }

阅读(779) | 评论(0) | 转发(0) |
0

上一篇:exec系列函数

下一篇:fcntl函数

给主人留下些什么吧!~~