sig在Java里什么意思_在waitpid中处理SIG_CHLD

鉴于以下内容:

处理程序

void sig_child(int sig)

{

signal(SIGCHLD, sig_child);

if (sig == SIGCHLD)

{

int status;

pid_t num;

while ((num = waitpid(WAIT_ANY, &status, WNOHANG)) > 0)

{

}

if (num == -1 && errno != ECHILD)

{

// We shouldn't reach here

assert(0);

}

}

主要的模糊:

if (pidnum)

{ //Some work

int status;

pid_t num = waitpid(pidnum, &status, 0);

// Some work

}

我认为应该发生以下情况:

1)主代码(在第二个模糊中)调用waitpid

2)引发SIG_CHLD,因此控制转移到信号处理程序

3)信号处理程序从信号处理程序中删除已终止的子进程,获取其状态信息

4)当控制转回主代码(第二个模糊)时,由于进程的子进程已从进程表中删除,因此num应设置为-1

实际上,发生了以下情况(我使用了一些现在被删除以跟踪流程的打印语句),这与我上面的理解相矛盾:

1)主要的模糊到达waitpid

2)引发SIG_CHLD,因此控制转移到处理程序

3)num设置为-1,errno设置为ECHILD

4)控制返回到主模糊,其中num被赋予之前分叉的孩子的pid .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值