c-从子进程获取退出代码



我已经在子进程的退出代码中传递了一个参数,所以在父进程中,我正在尝试调用另一个函数,该函数通过使用wait传递子进程传递的退出状态代码。然而,我在使用wait调用时只得到-1作为退出状态代码,有没有任何方法可以在调用wait方法时在退出代码中获得参数传递。

#include <stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include<sys/wait.h>
pid_t ppid;
void child();
void parent();

int get_child_exit_status()
{
int status=wait(&ppid);
return status; //returns -1 instead of 101

}
int main(void)
{  

ppid = getpid();

fork();
child();
wait(&ppid);
printf("Child exited with status=%d",get_child_exit_status());
return 0;
}

void child()
{
pid_t c_pid = getpid();
if(c_pid == ppid)
{

return;

}
printf("This is a childn");
int status;

scanf("%d",&status); //input 101
exit(status);
}

您的代码令人困惑。尽量简化:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main()
{
int status;
int code;
switch (fork()) {
case 0: // child code
scanf("%d", &code);
return code;
default: // parent code
wait(&status);
printf("child exited with status %dn", WEXITSTATUS(status));
return 0;
}
}

我在这里使用了switch,所以您可以很容易地为-1添加一个案例来处理分叉时的任何错误。

最新更新