进程相关
进程的管理:(操作系统内核负责)
描述进程(pcb进程控制块->就是一个结构体(task_struct))
task_struct是一个很大的结构体,包含很多的内容
{task_struct:
进程标识符(pid)
内存指针(告诉进程代码/数据都在内存哪个部分)
进程状态
R 就绪状态,进程在就绪队列中,就会处于这个状态
S 睡眠状态,
D 深度睡眠状态,密集得到进行IO操作的时候(吐核)
T 暂停stop
t 跟踪trace
X 进程已经结束,只是在Linux源码中存在,真实是看不到的
Z 僵尸进程:和父进程和子进程相关联
{(成因:子进程结束之后,父进程没有回收子进程的资源。
危害:内存泄露
处理:kill 僵尸进程的父进程 (更科学地处理:进程等待))
使用代码来创建子进程
fork();(#include<unistd.h>)
{
返回值:一次调用有两个返回值。(父进程返回子进程pid,子进程返回0),如果失败返回<0:a).内存不够。 b).进程太多,达到上限。
执行过程:父子进程都是紧接着fork继续执行
先后顺序:不确定,取决于操作系统的调度器
}
getpid() :获取进程标识符
getppid() :获取父进程的标识符
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t ret=fork();
if(ret>0){
printf("father:pid:%d,ppid:%d,ret:%d\n",getpid(),getppid(),ret);
while(1)
sleep(1);
}
else if(ret==0){
printf("child:pid:%d,ppid:%d,ret:%d\n",getpid(),getppid(),ret);
int count= 5; while(count>0){sleep(1);--count;}
}
else{
//创建失败
perror("fork");
}
return 0;
}
}
进程的调度(让少量的cpu能够满足大量的进程,并同时执行的需求)
并行:两个cpu分别执行两个进程
并发:一个cpu分别执行两个进程
2. 组织进程
双向链表进行组织,每个节点就是一个task_struct