当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : apue遇到麻烦 对SIGLD语义不太明白 请解答 谢谢
帖子发表于 : 2007-04-26 17:02 

注册: 2007-02-14 13:56
帖子: 52
地址: swust
送出感谢: 0 次
接收感谢: 0 次
小弟正在看10.7节,十分的郁闷,对“SIGCLD的配置设置为捕捉,内核立即检测是否有子进程准备好被等待”一直无法理解
书中的程序是这样的:
#include "apue.h"
#include <sys/wait.h>

static void sig_cld(int);

int
main()
{
pid_t pid;

if (signal(SIGCLD, sig_cld) == SIG_ERR)
perror("signal error");
if ((pid = fork()) < 0) {
perror("fork error");
} else if (pid == 0) { /* child */
sleep(2);
_exit(0);
}
pause(); /* parent */
exit(0);
}

static void
sig_cld(int signo) /* interrupts pause() */
{
pid_t pid;
int status;

printf("SIGCLD received\n");
if (signal(SIGCLD, sig_cld) == SIG_ERR) /* reestablish handler */
perror("signal error");
if ((pid = wait(&status)) < 0) /* fetch child status */
perror("wait error");
printf("pid = %d\n", pid);
}
作者说在SVR2下编译运行此程序则其输出是一行行地不断重复SIGCLD received .最后进程用完其栈并异常终止。为什么会不断重复SIGCLD received呢?我在我的机子上运行输出的却只有SIGCLD received pid = 6840这一行并没有重复,为什么会出现差别呢?

谢谢!1


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译