- 论坛徽章:
- 0
|
本帖最后由 leewon1988 于 2013-01-10 14:43 编辑
- static void
- sig_hup(int signo)
- {
- printf("SIGHUP received, pid = %d\n", getpid());
- }
- static void
- pr_ids(char *name)
- {
- printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
- name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
- fflush(stdout);
- }
- int
- main(void)
- {
- char c;
- pid_t pid;
- pr_ids("parent");
- if ((pid = fork()) < 0) {
- printf("fork error");
- }
- else if (pid > 0) {
- sleep(5);
- exit(0);
- }
- else {
- pr_ids("child");
- signal(SIGHUP, sig_hup);
- kill(getpid(), SIGTSTP);
- pr_ids("child"); //这里调用pr_ids时,父进程已经关闭,但是调用printf却可以向原来的controlling terminal写
- if (read(STDIN_FILENO, &c, 1) != 1) //但是这里向原来的terminal读却有问题
- printf("read error from controlling TTY, errno = %d\n",
- errno); //这里也可以向原来的controlling terminal写
- exit(0);
- }
- }
复制代码 这是为什么?本人linux新手,可能是我理解有错误。
各位求指点 |
|