进程参数和环境变量的意义
- 一般情况下,子进程的创建是为了解决某个问题。那么解决问题什么问题呢?这个就需要进程参数和环境变量来进行决定的。 
- 子进程解决问题需要父进程的“数据输入”(进程参数 & 环境变量) 
- 设计原则:3.1 子进程启动的时候,必然用到的参数使用进程参数传递 3.2子进程解决问题可能用到的参数使用环境变量传递 
- 父进程 ====>(进程参数/环境变量) ===> 子进程 
子进程是如何将结果返回给父进程?
我们知道父进程创建子进程是为了解决问题的,那么这个解决问题的结果需要返回给父进程吗?当然需要!先看看一下一个简单的demo
#include <stdio.h>
int main(int argc,char* argv[])
{
    printf("Test:: Hello World\n");
    return 19;
} 
   父进程自己解决问题不就行了吗?为什么还要创建子进程来解决问题呢?
深入理解父子进程
- 子进程的创建是为了并行的解决子问题(问题分解) 
- 父进程需要通过子进程的结果最终解决问题(并获取问题) 
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *wstatus);
1.等待一个子进程完成,并返回子进程标识和状态信息
2.当有多个子进程完成,随机挑选一个子进程返回
pid_t waitpid(pid_t pid, int *wstatus, int options);
1.可等待特定的子进程或者一组子进程
2.在子进程还未终止时,可以通过options设置不必等待(直接返回)
#include <unistd.h>
void _exit(int status); //系统调用,终止当前进程
#include <stdlib.h>
void exit(int status);//库函数,先做资源清理,再通过系统调用(_exit)终止进程
void abort(void); //异常终止当前进程(通过产生SIGABRT信号终止)
                  //信号可以理解为:操作系统发送给进程的通知。
接下来来看一下dmeo。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc,char* argv[])
{
    pid_t pid=0;
    int a=1;
    int b=0;
    int status=0;
    printf("parent = %d\n",getpid());
    if((pid = fork()) == 0) exit(-1);
    printf("child = %d\n",getpid());
    if((pid = fork()) == 0) abort();
    printf("child = %d\n",getpid());
    if((pid = fork()) == 0) a=a/b,exit(1);
    printf("child = %d\n",getpid());
    sleep(3);
    while((pid = wait(&status)) > 0)
    {
        printf("child:%d,status=%x\n",pid,status);
    }
    return 19;
}


















