受人之托写一个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]