Linux系统学习—学习进程笔记心得
一.进程和程序解析
(1)概念:
- 程序是静态的概念,如gcc xxx.c –o pro,在磁盘中生成pro文件,这叫做程序
- 进程是指程序的一次运行活动(通俗点就是程序跑起来了,系统中就多了一个进程)
(2)查看系统中的进程:
- 可使用ps指令查看,同时可使用grep来查找程序中你想找的某个进程
(3)进程管理器
- 可以通过使用ps -aux / top来调用显示系统全部进程(类似于windows下的任务管理器),同时也可在后面加grep查找你想找的某个进程
(4)进程标识符
- 每一个进程都有一个非负整数表示的唯一ID,称作pid(类似身份证)
-
Pid=0 :称为交换进程(作用—进程调度)
-
Pid=1 :为init进程 (作用—系统初始化)
(5).父进程与子进程概念
- 进程A创建了进程B,那么A叫做父进程,B叫做子进程
二.getpid()解析
头文件:
- #include <sys/types.h>
#include <unistd.h>
函数原型:
- pid_t getpid(void);
代码演示:
三.创建进程fork和vfork解析
(1) fork解析
- 头文件: #include <unistd.h>
函数原型:
- pid_t fork(void);
实质:
- 会对父进程存储空间进行拷贝一份,在拷贝那份上运行,父进程和子进程会同时运行,两者运行快慢取决于系统进程调度。
代码演示:
- 第一行是由父进程执行
- 第二行由子进程同时执行得出子进程ID号码
(2) 父进程、子进程区分解析
fork函数调用成功后,返回两次
-
返回值为0时,此时代表当前进程为子进程
-
返回值大于0时,代表当前进程为父进程
-
调用失败的情况下,返回值为-1
代码演示:
头文件:
#include <sys/types.h>
#include <unistd.h>
2.函数原型:
pid_t vfork(void);
3.与fork函数对比区别:
-
vfork 直接使用父进程的存储空间,不用在另起拷贝一份
-
vfork 执行首先保证子进程先运行,直到子进程调用**exit()**函数退出后,才执行父进程
使用fork和vfork函数代码对比:
(2)使用vfork:
(4) 进程的退出
使用exit(结束码)、_exit(结束码)、_Exit(结束码)退出,都会带上一个结束码
(5)僵尸进程:
此时父进程没有使用wait()来接收子进程返回的结束码导致子进程变成僵死进程(僵尸进程)Z+
(6)使用wait()接收子进程结束码
概念:
-
父进程等待子进程退出,收集子进程的退出状态,如果子进程退出状态不被收集,子进程则会变成僵尸进程
-
可采用宏:==WEXITSTATUS == 来收集exit(结束码)退出的结束码,这样子进程才不会变成僵尸进程
四.wait和waitpid解析
头文件:
#include <sys/types.h>
#include <sys/wait.h>
函数原型:
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()下不会阻塞父进程但是子进程会变成僵尸进程
五.孤儿进程
总结:
- 要理解fork、vfork创建进程的区别,以及进程的概念、含义、作用
- 进程是之上级传指令下来给父进程,父进程将指令传给小弟子进程去完成任务,而父进程继续留下来接受新的指令,这样重复叫新的子进程去完成。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68487.html