Linux获取进程返回值

受人之托写一个Linux小Demo,大致意思是这样的:

创建进程,并等待进程结束,获取进程返回值。

创建进程来说,fork()就可以了,比较简单这里就不来了。我模拟2个C程序,依次启动就相当于创建了2个进程(就不再fork了)。

等待进程结束的话,为了相对直观,令第二个进程Son睡眠10秒(顺便说一下,我把第一个进程写成了Father,第二个写成了Son,虽然没有父子关系,不过Son是Father负责启动的,哈哈)

最后一步是获取进程返回值,这里需要用到WEXITSTATUS。

WIFEXITED(status) 用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。

当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。

这里模拟的时候,直接令程序返回一个int值。

以下是程序代码:

Father.c

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv)
{
    printf("Father run\n");
    int n = system("./Son");
    printf("Son return value = %d\n", WEXITSTATUS(n));
    return 0;
}

Son.c

#include <stdio.h>

int main(int argc, char* argv)
{
    printf("Son run\n");
    sleep(10);
    return 5;
}

编译运行:

gcc Father.c -o Father
gcc Son.c -o Son

结果如图:

[caption id=”attachment_206” align=”alignnone” width=”203”]程序执行结果 程序执行结果[/caption]