Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474277
  • 博文数量: 120
  • 博客积分: 1853
  • 博客等级: 上尉
  • 技术积分: 1177
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-22 22:40
文章分类

全部博文(120)

文章存档

2013年(16)

2012年(104)

分类: LINUX

2012-05-08 17:00:39

习题9.2


点击(此处)折叠或打开

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

  7. int main(){
  8.     pid_t pid;
  9.     
  10.     if((pid = fork()) < 0){
  11.         perror("fork");
  12.         exit(1);
  13.     }
  14.     //创建子进程
  15.     else if(pid == 0){
  16.         if(setsid() < 0){
  17.             perror("setsid");
  18.             _exit(2);
  19.         }
  20.     //tcgetpgrp的值为-1代表没有控制终端(open("/dev/tty",O_RDONLY)值为-1说明)
  21.         printf("child: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
  22.             getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
  23.         if(open("/dev/tty", O_RDONLY) == -1){
  24.             printf("there isn't control ternimal\n");
  25.         }
  26.         _exit(0);
  27.     }
  28.     //子进程输出完毕之后才输出父进程
  29.     waitpid(pid, NULL, 0);
  30.     printf("parent: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
  31.             getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));

  32.     return 0;
  33.     
  34.     
  35. }

阅读(840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~