一、基本概念 ·课本概念:程序的一个执行实例,正在执行的程序等。 ·内核观点:担当分配系统资源(CPU时间、内存)的实体。二、描述进程 ·进程信息被放在一个叫进程控制块的数据结构中,可以理解为进程属性的集合。
·课本上称为PCB,Linux操作系统下的PCB是:task_struct。1、task_struct-PCB的一种 ·在Linux中描述进程的结构体叫task_struct。
·task_struct是Linux内核的一种数据结构,它会被装在到RAM(内存)里并包含着进程的信息。
2、task_struct分类 ·标识符:描述本进程的唯一标识符,用于区别其他进程 ·状态:任务状态、退出代码、退出信号等
·优先级:相对于其它进程的优先级
·程序计数器:程序中即将被执行的下一条指令的地址
·内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
·上下文数据:进程执行时处理器的寄存器中的数据
·I/O状态信息:包括显示I/O请求,分配给进程的I/O设备和被进程使用的文件列表
·记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等
三、组织进程 可以在内核源代码里找到组织进程。所有运行在系统里的进程都以task_struct链表的形式存在在内核里
四、查看进程进程的信息可以通过/proc系统文件来查看例:获取PID为1的进程的信息
五、通过系统调用获取进程标识符 ·进程id(PID)
·父进程id(PPID)
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 printf("pid %d
",getpid());
8 printf("ppid %d
",getppid());
9 return 0;
10 }
六、通过系统调用创建进程(fork初识) ·运行man fork认识fork
·fork有两个返回值
·父子进程共享代码,数据各自开辟空间,私有一份(采用写时拷贝)
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 int ret = fork();
8 printf("hello proc : %d!,ret : %d
",getpid(),ret);
9 sleep(2);
10 return 0;
11 }
·fork之后通常要用if分流
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 int ret = fork();
8 if(ret < 0){
9 perror("fork");
10 return 1;
11 }
12 else if(ret == 0){//child
13 printf("I am child: %d!,ret : %d
",getpid(),ret);
14 }
15 else{//parent
16 printf("I am parent : %d!,ret : %d
",getpid(),ret);
17 }
18 sleep(2);
19 return 0;
20 }