免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2343 | 回复: 8
打印 上一主题 下一主题

[c] apue 信号问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-23 00:55 |只看该作者 |倒序浏览
新手看apue,想验证下父进程结束后,系统向孤儿进程组中处于停滞状态的进程发送挂断信号(SIGHUP)、继续信号(SIGCONT),可为什么打印出来SIGCONT在前呢?
static void
sig_hup(int signo)
{
        printf("SIGHUP received, pid = %d\n", getpid());
        fflush(stdout);
        sleep(1);
}

static void sig_cont(int signo)
{
        printf("SIGCONT recevied,pid = %d\n", getpid());
        fflush(stdout);
        sleep(1);
}
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) {   /* parent */
                sleep(5);               /* sleep to let child stop itself */
                exit(0);                /* then parent exits */
        } else {                        /* child */
                pr_ids("child");
                signal(SIGHUP, sig_hup);        /* establish signal handler */
                signal(SIGCONT,sig_cont);
                kill(getpid(), SIGTSTP);        /* stop ourself */
                pr_ids("child");/* prints only if we're continued */
                if (read(STDIN_FILENO, &c, 1) != 1)
                        printf("read error from controlling TTY, errno = %d\n",
                            errno);
                exit(0);
        }   
}
运行结果如下:

[Nsos5 apue.2e]# ./a.out
parent: pid = 18074, ppid = 30092, pgrp = 18074, tpgrp = 18074
child: pid = 18075, ppid = 18074, pgrp = 18074, tpgrp = 18074
[Nsos5 apue.2e]# SIGCONT recevied,pid = 18075
SIGHUP received, pid = 18075
child: pid = 18075, ppid = 1, pgrp = 18074, tpgrp = 30092
read error from controlling TTY, errno = 5

各位大大有什么好的方法验证这两个信号的先后顺序??

论坛徽章:
0
2 [报告]
发表于 2008-03-23 11:05 |只看该作者

  1. kill(getpid(), SIGTSTP);        /* stop ourself */
复制代码

这句是为了什么?

论坛徽章:
0
3 [报告]
发表于 2008-03-23 12:33 |只看该作者
停止子进程 等待父进程退出从而变成孤儿进程

论坛徽章:
0
4 [报告]
发表于 2008-03-23 21:23 |只看该作者
原帖由 doofy 于 2008-3-23 12:33 发表
停止子进程 等待父进程退出从而变成孤儿进程

孤儿进程不是父进程死了吗, 你怎么杀了子进程

论坛徽章:
0
5 [报告]
发表于 2008-03-23 23:18 |只看该作者
进程收到了SIGHUP信号时,处于停止状态.这个信号被阻塞
当收到SIGCONT信号时,进程继续运行,然后处理SIGHUP信号.

论坛徽章:
0
6 [报告]
发表于 2008-03-25 22:26 |只看该作者
原帖由 xi2008wang 于 2008-3-23 23:18 发表
进程收到了SIGHUP信号时,处于停止状态.这个信号被阻塞
当收到SIGCONT信号时,进程继续运行,然后处理SIGHUP信号.


有一点不明白,想请教。
程序从哪接到的SIGCONT以及SIGHUP?

论坛徽章:
0
7 [报告]
发表于 2008-03-25 22:33 |只看该作者
自己打印一下ppid

论坛徽章:
0
8 [报告]
发表于 2010-03-02 20:56 |只看该作者
有一点不明白,想请教。
程序从哪接到的SIGCONT以及SIGHUP?

内核

论坛徽章:
0
9 [报告]
发表于 2010-03-03 10:10 |只看该作者
这位兄弟挖我两年前的帖子!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP