Linux程序和进程
1.什么是程序
程序是二进制文件,占用磁盘空间
2.什么是进程
运行中的程序
所有的数据都在内存中
需要占用更多的系统资源(CPU,物理内存)
3.pcb进程控制块
实际上是一个结构体
里面放了很多数据
4.进程的五种状态5.父进程子进程(fork)
子进程是父进程的一份拷贝,唯一的区别就是他们的进程ID是不同的
fork函数
int fork(void)
函数有两个返回值父进程返回值为子进程的ID,子进程的返回值为0.
6.写函数了解父子进程之间的关系
pid_t(pid的一种数据类型)
getpid(得到当前进程的进程id)
子进程创建成功以后,代码执行位置?
父进程执行到哪里,子进程就从哪里开始执行
即(fork函数之后);
父子进程的执行顺序?
不一定,谁先抢到CPU资源谁先执行
7.进程相关的命令
ps
ps aux
ps aux | grep +进程名(更加详细的查找某个进程的详细信息)
kill:给进程发送一个信号
kill -l 查看kill的所有信号
kill 9 +进程的pid 杀死某个进程
打开另外一个终端杀死一个死循环进程进程必死无疑
8.父子进程之间能通过全局变量进行通信吗?
不能
两个进程之间的内存不能共享
9.exec函数族
让父子进程执行不相干的操作
能够替换进程地址空间中的源代码.text段
当前程序中调用另外一个应用程序
execl(“绝对路径”,“占位”,“参数”,NULL);
NULL相当于一个哨兵,当函数运行到NULL则意味着参数结束
execl("/bin/ls",“ls”,"-la",NULL);(实例)
进程回收
1.孤儿进程
爹生孩子
爹先死,孩子还活着,孩子叫做孤儿进程
孤儿被init进程领养,init进程变成孤儿进程的父亲
目的:为了释放子进程占用的系统资源
①进程结束之后,能够释放用户区空间
②释放不了pcb,必须由父进程释放
2.僵尸进程
子进程死了(虽然死了还占用系统资源,需要释放pcb),父进程还活着,父进程不去释放子进程的pcb,子进程就变成了僵尸进程
3.进程回收
函数wait-阻塞函数
pid_t wait(int* status);
返回值
-1:回收失败,已经没有子进程了
大于0:回收子进程对应的pid
参数:status
判断子进程是如何死的
①正常退出
②某个信号杀死
waitpid–