首先我们来讨论下,进程和程序的区别,有些人说进程就是存储在内存的程序,其实这样的说法是不正确的,其实进程是程序加PCB(数据管理模块),就是进程信息被存放在一个加控制模块的数据结构中,可以理解为进程属性集合。
接下来我们来学习下一个重要的函数:fork函数
fork函数其作用就是创建一个子进程,首先我们创建一个子进程的方法有两种,一个是cmd or run command fork ,在操作系统的角度上讲,上面建立的进程方式没有什么不同。
fork的本质是创建进程,那么它是不是一定会导致系统里多一个进程呢,其实进程就是与进程相关的内核数据结构+数据代码和相应的数据(task_struct),所以,创建之后是会在系统中多一个进程的。
那么所创建的子进程是什么,有什么?所谓的子进程在默认的情况下,会继承父进程的代码和数据,内核的数据结构也会以父进程为模板创建,其实也就是说,内核的数据结构大部分都是个父进程一样的。那么问题来了,既然都一样,是不是我们创建的一个子进程是不是要和父进程干一样的活,其实不是的,因为fork()函数有返回值,其返回值类型为pid_t,我们可以理解为整数,所以这个可以让我们子进程和父进程做不一样的事,所以子进程返回的父进程的ID,父进程返回的是0。
接下来,我们再讨论下进程状态的意义:
其意义在于我们操作系统可以快速判断进程完成特定的功能,比如调度,其本质也是一种分类。
具体状态有 R 运行态(不一定正在占据CPU,也可能是放在了运行队列中)
S (sleep) 当我们完成某种任务的时候,任务条件不具备,需要进行某种等待
D(disk sleep) 和S状态差不多。唯一不同就是不可中断
T 暂停状态
t 追踪状态
x 死亡状态:回收进程——进程相关的内核数据结构+代码和数据。
z 僵尸状态 :为什么要有僵尸状态?因为需要辨别出退出死亡原因
介绍几个代码 pid+ -1 显示命令
kill -19 +pid 杀死进程
kill -9+恢复进程
查看进程PPID的命令:ps axj | head -1 && ps ajx | +进程的PID号