unix编程:关于孤儿进程组的创建

最近在看《unix环境高级语言编程》,对于第九章建立孤儿进程组的代码不是很理解,具体有两点:
1.子进程调用kill后为什么不会退出
2.我的运行时环境是debain8,运行时并没有出现read error的打印,是unix实现不同的原因吗,有没有大佬能有详细一点的描述
谢谢

附上书中代码:

#include "apue.h"
#include <errno.h>

static void sig_hup(int signo){
    printf("SIGHUP received,pid=%ld\n",(long)getpid());
}

static void pr_ids(char* name){
    printf("%s:pid=%ld,ppid=%ld,pgrp=%ld,tpgrp=%ld\n",
            name,(long)getpid(),(long)getppid(),
            (long)getpgrp(),(long)tcgetpgrp(STDIN_FILENO));
    fflush(stdout);
}

int main(){
    char c;
    pid_t pid;

    pr_ids("parent");
    if((pid=fork())<0)
        err_sys("fork error");
    else if(pid>0)
        sleep(5);
    else{
        pr_ids("child");
        signal(SIGHUP,sig_hup);
        kill(getpid(),SIGTSTP);
        pr_ids("child");
        if(read(STDIN_FILENO,&c,1)!=1)
            printf("read error %d on controlling TTY\n",errno);
    }
    exit(0);
}

再次感谢

阅读 1.9k
1 个回答
  1. 不要被 kill 这个名字骗了,它不是用来杀死进程的,而是向进程发信号的
  2. 直接在 shell 中运行,而不要用 IDE 提供的终端
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进