进程是一个动态的过程,而不是一个静态的实物
进程就是程序的一次运行过程,一个可执行程序a。out的一次运行过程,a.out从运行到结束,就是一个进程。
进程控制块PCB process contrl block就是内核中专门管理进程的数据结构,包含了进程相关的各种信息。
进程ID,OS给每一个进程分配了一个ID,根文件描述符很像
ps命令,打印系统当前进程
PID进程ID号
TTY在哪个终端上面
时间和哪一个命令
输入ps -a 显示
ps-aux显示所有进程 类似于windows下的任务管理器
从1开始,0是系统内部的,内核态下面的进程 我们看不到的
有一些连着有些不连着 不连着运行一下就终结了
再分配给新的进程就接着往下分配了
进程号的意义,能够标识唯一的进程
getpid,getppid获取本进程 父进程的ID,当前进程是父进程产生的 parents的意思
getuid,获取当前的用户ID,用一个数字编号表示当前是哪个用户的ID
geigid,获取当前的组ID
geteuid,获取有效用户ID
geiegid,获取有效组ID
Linux下有实际用户ID和有效用户ID,实际组ID,有效组ID
pid_t t代表type,所以读作PID type 类型的意思
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
//int ret = -1;
printf("PID : %d.\n", getpid());
printf("PPID : %d.\n", getppid());
return 0;
}
bash是脚本是当前程序的父进程
每一次当前的进程的ID都变化 ,但是父进程的ID不变
进程被分配的数字不会被重复使用
运行完,这个ID也不会再分配给别的 进程ID
其实是直接去进程控制块去拿出的ID
多进程调度的原理
操作系统同时运行多个进程,多个进程在被同时运行,裸机程序其实就是只运行一个进程
主要因为CPU的性能不够好,高级CPU性能快,要发挥最大的效能,从而有了宏观的并行,微观的串行
要通过多进程发挥CPU的最大效能
多进程要有调度,比如十个时间片,给三个进程分
所以必须要有一套机制和策略调度进程,其实是一套算法,先运行谁后运行谁,每一个运行多久,
什么样的任务合理,比较急的先做,不太急得后做
要考虑任务的复杂情况,调度原理,跟我们做事是一样的
调度虽然复杂,但是不用我们考虑
准确的来说,系统调度是以线程为单位的而不是以进程为单位的
类似于饭馆上菜,给大家都先上点
进程就是程序的一次执行