程序:储存在外存中的一段数据组成的文件
进程:使一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡
进程相关命令:
1.top:动态查看系统中所有进程的信息(根据cpu占有率排序)
PID:唯一识别进程的ID号
优先级:Linux中数值低优先级高
进程状态:
R:运行态/就绪态
S:睡眠态/可换醒态
D:不可唤醒等待态
T:暂停态
Z:僵尸态----代码执行后空间未回收
X: 结束态
2.nice:以指定优先级来运行
eg: nice -n 10 进程名 ----10为优先级
renice:重新设置一个正在运行的进程的优先级
eg:renice -n 10 PID
3.kill:杀死指定的进程任务
kill -9 进程PID ----以第9种方式杀死PID
killall:停止所有进程
killall -9 进程名 ----杀死以该名称命名的所有文件名
4.ps -ef
查看当前时刻所有的进程信息----不会实时更新
PPID:父进程的ID号----进程是由老进程产生的
5.pstree
查看进程树的关系
6.ps -aux
查看进程信息
7.jobs
查看终端下后台执行的任务
8../a.out &
将./a.out后台运行
9.fg ID
将后台任务放前台运行
进程的创建
1.进程运行时,操作系统会为进程分配0~4G的虚拟内存空间,分为文本段,数据段,系统数据段
文本段:
也称为文本区,存放代码和指令
数据段:
也称为数据区,可以细分为:
1.字符串常量区
2.未初始化全局变量/静态变量
3.已初始化全局变量/静态变量
系统数据段:
包含堆区和栈区
2.两个进程中保存数据的地址相同,其内容不会相同,原因在于:在进程不被执行时,数据保存在物理内存中,执行时,传入虚拟内存中,因此,在两个进程中,(虚拟)地址相同,但内容不同。
3.多进程处理本质是宏观并行,微观串行
4.进程的创建
fork
pid_t fork(void);
功能:
创建一个子进程,新创建的进程称为原来进程的子进程,原来的进程称为新进程的父进程
参数:
void 省略
返回值:
成功子进程返回0
父进程返回子进程的PID
失败返回-1
可通过返回值为0或pid来判断是什么进程,0为子进程,!0为父进程
父进程调用fork创建子进程,子进程拷贝父进程的文本段、数据段、系统数据段
getpid
pid_t getpid(void);
功能:
获得调用进程的PID号
getppid
pid_t getppid(void);
功能:
获得调用进程的PPID
sleep函数
功能:延时功能,sleep(a),a为几就延时几秒
5.进程结束:
exit
void exit(int status);
功能:
让进程结束
参数:
status:进程结束的状态
_exit
void _exit(int status);
功能:
让进程直接结束
参数:
status:进程结束的状态
6.进程消亡
僵尸进程的消亡: 1.让父进程先结束 2.让父进程回收子进程空间
孤儿进程的消亡:( 进程的父进程先结束,此时该进程称为孤儿进程)
wait
pid_t wait(int *wstatus);
功能:
回收子进程空间
参数:
wstatus:存放子进程结束状态空间的首地址
WIFEXITED(wstatus) 进程是否正常退出
WEXITSTATUS(wstatus)进程结束状态值
WIFSIGNALED(wstatus)进程是否被信号杀死
WTERMSIG(wstatus) 获得杀死进程的信号编号
返回值:
成功返回回收到的子进程PID
失败返回-1