1. 什么是进程?
进程就是程序执行的过程,包括创建,调度和消亡,是活的
2. 进程空间如何划分?每个区域的特点?买个区域存放哪些数据?
文本段:存储代码和指令
数据段:全局变量,静态变量,字符串常量
在编译时分配空间,程序运行时,将a.out数据段加载到内存数据段中
程序结束时回收数据段空间
未经初始化为0值
系统数据段:栈区:操作系统管理区域,存放局部变量,执行到变量定义时分配空间,超过
变量作用域回收数据空间
堆区:程序员管理的区域,malloc申请,free释放
内核:操作系统核心区域,用户无法访问,负责内存管理,CPU管理,硬件设备管理,进程
管理,文件系统管理
3. 常见的进程调度算法有哪些?
先来先执行,后来后执行
高优先级调度算法
时间片轮转调度算法
时间片:CPU在某个进程任务中执行的一段时间
多级队列反馈
负载均衡调度算法
4. 进程状态分为哪几种类型?
R 就绪态:正在运行的任务(没有占用CPU)
R 运行态:正在运行的任务(占用CPU)
S 可唤醒等待态:进程挂起等在某个资源到达后继续向下执行
D 不可唤醒等待态:进程任务挂起直到等到某个信号继续向下执行
T 暂停态:进程任务挂起,直到CPU发送指令才能继续向下执行
Z 僵尸态:代码已经执行完毕,空间仍然存在
X 结束态:代码执行完毕,空间被回收
5. 进程相关的命令有哪些?
top:根据CPU占用率查看当前所有进程任务
PID:唯一识别进程的ID号 ( pid > 0 )
PPID:父进程的ID
按q退出top命令
ps -ef:ps -ef | grep a.out 组合命令,查看所有进程中与a.out相关联的内容
ps -aux:查看进程状态(就绪态、运行态 R、可唤醒等待态 S、不可唤醒等待态 D、停止态
T、僵尸态 Z、结束态 X)
pstree:查看所有进程的关系
kill:kill -9 进程PID
killall -9 进程名
./a.out &:在后台执行a.out
6. 如何创建进程?fork和vfork有什么区别?
在32位操作系统中,会为运行进程开辟0 - 4G虚拟内存空间
fork() 创建一个新的进程,这个新进程是父进程的副本。它复制了父进程的数据段、代码段和
堆栈。子进程获得与父进程相同但独立的地址空间,任何一个进程对数据的修改都不会影响另一个进
程。
vfork() 与 fork() 不同,它不复制父进程的地址空间,子进程运行在父进程的地址空间中。保
证子进程先于父进程运行,并且父进程会在子进程调用 exec() 或 exit() 之后才可能被调度运行。如
果子进程在调用这些函数之前依赖于父进程的进一步动作,可能会导致死锁。
7. 什么是僵尸进程?如何产生?如何避免
什么是僵尸进程?
进程执行结束,空间没有被回收,就会成为僵尸进程
如何避免产生僵尸进程?
让父进程先结束,子进程会成为孤儿进程,被init进程收养,子进程结束时,init进程回收子进程空间
子进程结束,父进程回收子进程空间(wait或者waitpid回收子进程空间)