C linux进程中return语句的真实故事

C linux进程中return语句的真实故事,c,linux,process,operating-system,C,Linux,Process,Operating System,我试图为这个简单的代码配置输出。但我无法理解。 预期产量为 int main() { int val = 5; if(fork()) wait(&val); val++; printf("%d\n", val); return val; } 6 7 预期产量为 int main() { int val = 5; if(fork()) wait(&v

我试图为这个简单的代码配置输出。但我无法理解。 预期产量为

int main() 
{ 
     int val = 5; 
     if(fork()) 
         wait(&val); 
     val++; 
     printf("%d\n", val); 
     return val; 
}
6
7
预期产量为

int main() 
{ 
     int val = 5; 
     if(fork()) 
         wait(&val); 
     val++; 
     printf("%d\n", val); 
     return val; 
}
6
7
但是linux给了我

6
1537
请告诉我这个代码背后发生了什么。 我可以预测返回语句一定有问题。
非常感谢您的详细解释。

您只需更改函数的参数值wait()

int main() 
{ 
     int val = 5; 
     if(fork()) 
         wait(NULL); 
     val++; 
     printf("%d\n", val); 
     return val; 
}
您的输出为1537,因为status()函数会更改您的变量值

提取wait()的man,其中status表示函数的参数

如果status不为NULL,wait()和waitpid()将状态信息存储在它所指向的int中


祝你好运。

阅读会帮助你理解。简而言之:实际返回码只在8个最低位。为什么你不期望6/7?最低位?1537是0x601@JoachimPileborg@alk从链接的手册页面,关于
WEXITSTATUS
宏:“返回子级的退出状态。这包括状态参数的最低有效8位…”(强调我的)。关于返回值,您的答案似乎比我更详细。有人知道这个值到底发生了什么吗?为什么是1537?在这段代码中,需要更改的不仅仅是“wait”语句。这是因为fork()可能会失败,返回-1,这将满足'if'语句,然后父级将等待一个不存在的子级