linux wait 系统调用,Linux中的Wait(&status)系统调用

在子级中,您的程序只需将1加5,产生6,打印6,然后返回6作为退出状态。

在父级中,wait(&val)成功返回后,将val包含一个魔术cookie。孩子的退出状态被编码在这个cookie,但必须使用宏来提取WIFEXITED,WIFSIGNALED,WEXITSTATUS,WTERMSIG,等递增的cookie数字没有意义。如果知道W-macros在特定操作系统上的工作方式,则以数字方式将其打印出来会产生一些可以理解的想法,但是除了调试某些东西之外,您不应该这样做。

父级在程序中打印的数字1537易于理解,以十六进制表示:0x0601。这意味着在增加原始Cookie值之前,其值为0x0600。在Linux上,WIFEXITED(0x0600)是和WEXITSTATUS(0x0600) == 6。在任何其他操作系统上,它可能意味着相同,也可能不相同。

假设您打算生产一台Rube Goldberg机器,用于印刷6和7,则更好的方法是这样的:

#include

#include

#include

#include

#include

int main(void)

{

int val, status;

pid_t pid = fork();

if (pid == -1) {

perror("fork");

return 1;

}

if (pid == 0) {

val = 5;

val++;

printf("%d\n", val);

return val;

}

/* we are the parent if we get here */

if (wait(&status) != pid) {

perror("wait");

return 1;

}

if (!WIFEXITED(status)) {

assert(WIFSIGNALED(status));

printf("child process killed by signal %d\n", WTERMSIG(status));

return 1;

}

val = WEXITSTATUS(status);

val++;

printf("%d\n", val);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值