进程包含创建进程,等待进程,进程标识符,进程退出
创建进程 :fork()函数创建进程,使用成功后fork返回两次,返回值为0的时候是子进程,返回值大于0是父进程,返回值大于0的时候返回值等于子进程的pid号,调用失败返回-1。
用getpid();获取当前进程的id号,getppid()获取父进程的进程id。
如果A进程创建了B进程,那么A是B的父进程,B是A的子进程。
pid=0:称为交换进程 作用 进程调度。 pid=1 : init进程 作用系统初始化。
fork创建进程之后代码段子夫共享,就是把父进程的代码拷贝一份给子进程。如果改动数据子父数据不一样,fork以后父进程和子进程争抢运行。
vfork也可以创建进程和fork的区别是:
vfork直接使用父进程的储存空间,不拷贝。
vfork保证子进程先运行,当子进程调用函数退出以后,父进程才运行。
进程退出分为异常退出和正常退出
正常退出是调用函数 return exit 等属于正常退出。
异常退出调用abort或当进程收到某些信号是如ctrl+c进程异常退出。
等待进程
需要注意 子进程退出状态不被收集,会变成僵尸进程,父进程等待子进程退出并收集子进程退出状态。
等待进程函数 pit_t wait(int *status); status是需要传递的参数 。非空:子进程退出状态放到他所指定的地址空间。 空:不关心退出状态。
收集退出状态宏 WEXITSTATUS(&status);wait();返回一个状态码,解析状态码用宏解析。