公司网站设计基础任务书,美的集团网站建设,自己建立网站怎么搞,网站建设公司发展规划目录 进程的概念
进程标识符PID
系统调用创建进程-fork初识
进程状态
R状态#xff08;运行状态#xff09;
S#xff0c;D状态#xff08;休眠状态#xff09;
T#xff0c;t状态
Z状态#xff08;僵尸进程#xff09;
孤儿进程
X状态#xff08;死亡状态运行状态
SD状态休眠状态
Tt状态
Z状态僵尸进程
孤儿进程
X状态死亡状态 进程的概念
课本概念程序的一个执行实例正在执行的程序等。 内核观点担当分配系统资源CPU时间内存的实体。
其实进程内核数据task_struct程序的代码和数据 task_struct:Linux中描述进程的结构体是Linux内核的一种数据结构它会被装载到RAM(内存)里并且包含着进程的信息。 task_struct内容分类 1、标示符: 描述本进程的唯一标示符用来区别其他进程。 2、状态: 任务状态退出代码退出信号等。 3、优先级: 相对于其他进程的优先级。 4、程序计数器: 程序中即将被执行的下一条指令的地址。 5、内存指针: 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针 6、上下文数据: 进程执行时处理器的寄存器中的数据[休学例子要加图CPU寄存器]。 7、IO状态信息: 包括显示的I/O请求,分配给进程的IO设备和被进程使用的文件列表。 8、记账信息: 可能包括处理器时间总和使用的时钟数总和时间限制记账号等。 9、其他信息 进程标识符PID
1把程序运行起来./xxx.exe-----本质就是在系统中启动一个进程
进程分为两种1、执行完就退出。 2、一直不退直到用户退出-------常驻进程。
把程序运行起来查看进程属性每个进程都有其PID,这是进程的标识符 如何查看进程属性 可以用ps ajx也可以ls /proc(proc是一个存放进程属性的文件) 如 ps ajx | head -1 ps ajx |grep myproc ls /proc 注意如果进程关闭是查不到PID为5175的进程
因为proc是实时更新的 如何运行程序打印pid,ppid?(ppid是该父进程的pid) 获取PIDgetpid() -----依赖头文件sys/types.h 获取PPID:getppid() (Linux系统启动后新创建任何进程的时候都是由自己的父进程创建的 如何杀掉进程 kill -9 pid 系统调用创建进程-fork初识 运行 man fork 认识fork fork有两个返回值 如果返回值为0则为子进程 返回值大于0则为父进程 父子进程代码共享数据各自开辟空间私有一份采用写时拷贝) 1、子进程的创建分支fork 运行结果 更好的理解分支 2、fork()特点返回值上 父子1n fork()----多个进程-----父子关系------一般代码会共享但是数据是各自私有一份的。 可以参考下面的例子来理解 运行结果 由此可知 进程有很强的独立性 多个进程之前不影响 补充知识点 c.cc、.cpp、.cxx 进程状态
Linux进程状态本质就是用一个变量取不同的值来表示 R运行状态S休眠状态D磁盘休眠状态T停止状态t跟踪状态Z僵尸进程X死亡状态
R状态运行状态
一个进程已经准备就绪可以随时被系统调度此时就是运行状态如果只要一个进程cpu可以直接分配足够资源执行进程但是当有很多的进程被调度后cpu的资源就不够分配 这时每个进程需要去竞争cpu资源而cpu不可能同时给这么多进程分配资源这时就要有一个运行队列runqueue)把PCB组织起来进程在这个runqueue中就是R状态 一个进程一旦持有cpu会一直运行吗 不会 一个进程被拿到cpu执行时并不是等这个进程执行完毕才切换下一个进程。而是这多个进程在一个时间段内所有的进程都会执行并发执行每个进程执行一个时间片的时间后就会从cpu上拿下来切换成下一个进程.(进程切换) 一个时间片通常是10ms左右 在查看进程状态时我们会发现有R状态也要R状态,这是区分进程在前台执行还是在后台执行 ./test进程在前台执行 ./test 进程在后台执行 SD状态休眠状态
S状态本质就是等待”资源“就绪S状态可以中断
D状态也是一种休眠状态不过D状态不可中断
看下面的图 一个进程将1GB的数据放置到磁盘中等待磁盘读取我们知道外设尤其是像磁盘这样的设备读取速度是比较慢的这时进程就会一直等待但是在等待期间OS内存严重不足OS是由权限来杀掉进程来释放空间的这时如果OS看到这个等待的进程把他杀掉那么就会造成一个严重的问题磁盘在读取数据时出来问题这时它回去找调度它的进程但是这时候发现进程没有了就会造成这1GB数据的丢失。
如何避免这个问题
给这个进程设置深度休眠状态D状态那么这个进程就不会被OS杀掉就要等到进程自己醒来。注意D状态用kill也杀不掉除非重启有时甚至要断电。
Tt状态
T状态停止进程 kill -19 pid暂停进程 kill -18 pid继续进程 t状态遇到断点的暂停
Z状态僵尸进程
Z状态一个进程执行完毕且进程也退出了但是进程占用的资源并没有被完全释放。
看下面代码 运行我们发现子进程执行完后父进程还在在执行
查看进程信息 已经运行完毕但是需要维持自己的退出信息在自己进程的task_struct中会记录自己的退出信息让父进程来读取如果父进程没有读取则该进程会一直存在。
孤儿进程 孤儿进程父进程完成而子进程还在执行 孤儿进程一般由1号进程OS本身进行领养 孤儿进程为什么要被OS领养
要保证子进程被正常回收 X状态死亡状态 进程执行完毕且所占用的资源全部释放 kill -9 PID killall 进程名