1.进程的创建:
32bit操作系统中,进程运行,操作系统开辟 0 - 4G虚拟内存空间
虚拟内存空间分为:
两个进程所占虚拟内存空间并不是 8 G,而是 4 G,两个进程分时共用同一空间
两个进程物理内存空间是独立的,进程1和进程2空间独立
2.进程相关的函数接口:
1.fork
pid_t fork(void);
功能:
创建一个子进程
参数:
void 缺省
返回值:
创建失败返回-1
成功父进程中返回创建的子进程的PID
子进程中返回0
写时拷贝:fork创建子进程,子进程拷贝父进程中的数据,如果只是读取时不会为子进程单独生成空间,只有做写入操作时,才会
为子进程开辟独立空间,提高进程创建的效率
2.getpid
pid_t getpid(void);
功能:
获取进程的PID
3.getppid
pid_t getppid(void);
功能:
获得父进程的PID
2.exit
void exit(int status);
功能:
进程结束
参数:
status:进程结束的状态码
返回值:
缺省
主函数中使用exit等价于return
3._exit
void _exit(int status);
功能:
立即结束进程任务
3.进程消亡:
僵尸进程产生原因:
1.子进程任务结束,空间没有被回收,该进程成为僵尸进程
如何避免产生僵尸进程:
1.让父进程先结束,子进程再结束,子进程不会变成僵尸进程
2.子进程结束,父进程回收子进程空间,子进程不会变成僵尸进程
4.wait
pid_t wait(int *wstatus);
功能:
等待子进程结束,回收子进程空间
参数:
wstatu s:存放子进程结束的状态码空间首地址
返回值:
成功返回子进程的PID
失败返回-1
注意:
wait具有阻塞功能,如果子进程先结束,wait会不阻塞直接回收
如果子进程没结束,wait会阻塞直到子进程结束回收子进程空间
WIFEXITED(wstatus):判断子进程是否正常结束
WEXITSTATUS(wstatus):获取子进程正常结束的状态码
WIFSIGNALED(wstatus):判断子进程是否被信号打断结束
WTERMSIG(wstatus):获取子进程被信号打断结束的状态码