Linux系统学习---进程学习篇

Linux系统学习---学习进程笔记心得

  • 一.进程和程序解析
  • 二.getpid()解析
  • 三.创建进程fork和vfork解析
  • 四.wait和waitpid解析
  • 五.孤儿进程
  • 总结:

一.进程和程序解析

(1)概念:

  1. 程序是静态的概念,如gcc xxx.c –o pro,在磁盘中生成pro文件,这叫做程序
  2. 进程是指程序的一次运行活动(通俗点就是程序跑起来了,系统中就多了一个进程)

(2)查看系统中的进程:

  • 可使用ps指令查看,同时可使用grep来查找程序中你想找的某个进程

(3)进程管理器

  • 可以通过使用ps -aux / top来调用显示系统全部进程(类似于windows下的任务管理器),同时也可在后面加grep查找你想找的某个进程

(4)进程标识符

  • 每一个进程都有一个非负整数表示的唯一ID,称作pid(类似身份证)
  1. Pid=0 :称为交换进程(作用—进程调度)

  2. Pid=1 :为init进程 (作用—系统初始化)

(5).父进程与子进程概念

  • 进程A创建了进程B,那么A叫做父进程,B叫做子进程

(6) C程序的存储空间分配Linux系统学习---进程学习篇_第1张图片

二.getpid()解析

头文件:

  • #include
    #include

函数原型:

  • pid_t getpid(void);

代码演示:

Linux系统学习---进程学习篇_第2张图片

三.创建进程fork和vfork解析

(1) fork解析

  • 头文件: #include

函数原型:

  • pid_t fork(void);

实质:

  • 会对父进程存储空间进行拷贝一份,在拷贝那份上运行,父进程和子进程会同时运行,两者运行快慢取决于系统进程调度。

代码演示:

Linux系统学习---进程学习篇_第3张图片在这里插入图片描述

  • 第一行是由父进程执行
  • 第二行由子进程同时执行得出子进程ID号码

(2) 父进程、子进程区分解析

fork函数调用成功后,返回两次
  • 返回值为0时,此时代表当前进程为子进程

  • 返回值大于0时,代表当前进程为父进程

  • 调用失败的情况下,返回值为-1

代码演示:

Linux系统学习---进程学习篇_第4张图片
在这里插入图片描述
(3) vfork解析

头文件:

#include 
#include 

2.函数原型:

	pid_t vfork(void);

3.与fork函数对比区别:

  1. vfork 直接使用父进程的存储空间,不用在另起拷贝一份

  2. vfork 执行首先保证子进程先运行,直到子进程调用**exit()**函数退出后,才执行父进程

使用fork和vfork函数代码对比:

(1)使用fork函数:
Linux系统学习---进程学习篇_第5张图片
编译结果:
Linux系统学习---进程学习篇_第6张图片父子进程同时进行

(2)使用vfork:

Linux系统学习---进程学习篇_第7张图片
编译结果:
Linux系统学习---进程学习篇_第8张图片没有执行exit函数,则子进程一直执行

(4) 进程的退出

使用exit(结束码)、_exit(结束码)、_Exit(结束码)退出,都会带上一个结束码

(5)僵尸进程:

Linux系统学习---进程学习篇_第9张图片
Linux系统学习---进程学习篇_第10张图片
调用ps -aux 查看:

在这里插入图片描述

此时父进程没有使用wait()来接收子进程返回的结束码导致子进程变成僵死进程(僵尸进程)Z+

(6)使用wait()接收子进程结束码

概念:

  • 父进程等待子进程退出,收集子进程的退出状态,如果子进程退出状态不被收集,子进程则会变成僵尸进程

  • 可采用宏:==WEXITSTATUS == 来收集exit(结束码)退出的结束码,这样子进程才不会变成僵尸进程

四.wait和waitpid解析

头文件:

#include 
#include 

函数原型:

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

1.Option: 常用宏WNOHANG不会阻塞父进程
2.使用wait()函数会在exit()结束之前阻塞父进程,知道子进程结束才会执行wait()以后的代码
3.wait()下子进程不会成为僵尸进程,而waitpid()下不会阻塞父进程但是子进程会变成僵尸进程

代码演示:
Linux系统学习---进程学习篇_第11张图片

五.孤儿进程

Linux系统学习---进程学习篇_第12张图片

总结:

  1. 要理解fork、vfork创建进程的区别,以及进程的概念、含义、作用
  2. 进程是之上级传指令下来给父进程,父进程将指令传给小弟子进程去完成任务,而父进程继续留下来接受新的指令,这样重复叫新的子进程去完成。

你可能感兴趣的:(Linux系统学习,linux)