Linux数据管理的本质是数据管理
管理方法是先描述再组织。理解为面向对象进行管理。
进程
PCB:进程控制块。存储进程的属性。
进程:内核数据结构(task_struct)+进程对应的磁盘代码。
进程运行:
查询命令并显示标题。
杀掉进程。
进程在调度运行时具有动态属性。
getpid 返回值类型 pid_t 封装的数字类型
运行
存在8568进程目录
进程停掉后,目录消除。
多次启动 父进程相同,子进程不同。
父进程是bash进程,自动创建。
fork给父进程返回创建的子进程pid 给子进程返回0.
创建出了多进程 。if else if 和两个while同时执行。
fork后父子进程同时执行程序,fork后续代码被父子进程共享。
通过返回值不同,让父子进程执行后续共享代码的一部分。
父进程返回子进程pid 子进程返回0是因为父子进程各自执行的fork函数的return.
先返回的先写入,进程有独立性,写时拷贝,同一个id 虚拟地址一样,内容不同。
进程PCB在运行队列时就是运行状态。
状态是进程内部的属性。
阻塞状态:进程不能被cpu调度,要等待资源。
挂起:
将进程数据加载或保存到磁盘叫内存数据的换入换出。
printf大部分时间需要等待外设资源,所以一般查询到的进程状态是S. 阻塞状态的一种。
Ctrl+c可以停止。
+号代表前台进程。
不打印,状态一般查询到的是R 运行。
19是暂停进程 18是继续进程。
变成后台进程。 fg可将后台进程变成前台进程。
状态D 表示深度睡眠
运行到断点处,是t状态,tracing stop
僵尸进程 Z 子进程退出 父进程不退
孤儿进程:
进程优先级:
优先级本质是PCB里面的一个整数数字。
最终优先级等于=老的优先级(80)+NI(nice)。(80-20,80+19)
优先级数字越小,优先级越高。
nice 范围是[-20,19]
进程切换