今天的内容依然是对我之前内容的理解,大家想看详细的进程,可以去浏览我之前的文章。
1.概念
1.什么是进程?
进程就是运行中的程序。
进程一般分为交互进程、批处理进程和守护进程三类。
同时,根据进程间的关系分为子进程和父进程。根据父子进程的运行状态又可以有
孤儿进程和僵尸进程。(这里涉及到资源回收的问题,
大家注意孤儿进程是会被收养的,其资源可以被回收,而僵尸进程,由于子进程先接受,父进程无法回收其资源)
进程资源是有限的,如果不回收进程资源,则会浪费资源,使得其他进程的开辟产生问题。
进程分类详细概念
2.如何查看进程?
本人是通过虚拟机下,使用Linux的Ubuntu版本进行学习的,可以通过ps和top.
ps是显示瞬间进程的状态,并不动态连续;
如果想对进程进行实时监控应该用top命令。
ps还有一些命令参数:
-A :所有的进程均显示出来,与 -e 具有同样的效用;
-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
2.创建进程
1.fork()
1.#include <unistd.h>
2.pid_t fork (void);
•1) 创建一个子进程,失败返回-1
•2) 调用一次,返回两次
分别在父子进程中返回子进程的PID和0。
用返回值的不同,可以分别为父子进程编写不同的处理分支。
•3) 子进程是父进程的副本
子进程获得父进程数据段和堆栈段(包括I/O流缓冲区)的拷贝,
但子进程共享父进程的代码段。
•4) 函数调用后父子进程各自继续运行
其先后顺序不确定, 某些实现可以保证子进程先被调度。
•5) 共享文件表
函数调用后,父进程的文件描述符表(进程级)也会被复制到子进程中,
二者共享同一个文件表(内核级)。
3.进程退出
1.正常退出
1. 在main()函数中执行return 。
2.调用exit()函数
3.调用_exit()函数
2.异常退出
1.调用abort函数
2.进程收到某个信号,而该信号使程序终止。
4.wait/waitpid
wait 等待所有进程结束
waitpid 等待特点进程结束