0

最近在看《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);
}

再次感谢

5月28日提问
1 个回答
1

已采纳
  1. 不要被 kill 这个名字骗了,它不是用来杀死进程的,而是向进程发信号的
  2. 直接在 shell 中运行,而不要用 IDE 提供的终端

撰写答案

推广链接