Linux进程1

使用的指令:

ps(显示当前进程),

ps -aux(显示进程占用的各种资源)

ps -ajx(显示各种的有关ID号)

top(显示系统资源使用情况)

fork(创建线程),

vfork(让子线程先运行)

wait(柱塞线程,等待子线程的回应)

waitpid(可以使用调用者不柱塞),

getpid(获取当前的id),

getppid(目前进程的父id)

进程概念:

问1.什么是程序,什么是进程,有什么区别?程序是静态的概念,gcc xxx.c -o pro磁盘中生成pro文件,叫做程序 进程是程序的一次运行活动系统中就多通俗点意思是程序跑起来了,系统中就多了一个进程

问2.如何查看系统中有哪些进程?a.使用ps指令查看实际工作中,配合grep来查找程序中是否存在某一个进程 b.使用top指令查看,类似windows任务管理器

3.什么是进程标识符?每个进程都有一个非负整数表示的唯一ID叫做pid,类似身份证 Pid=0:称为交换进程(swapper)

作用一进程调度Pid=1:

init进程 作用一系统初始化 编程调用getpid函数获取自身的进程标识符getppid获取父进程的进程标识符

问4.什么叫父进程,什么叫子进程进程A创建了进程B那么A叫做父进程,B叫做子进程,父子进程是相对的概念,理解为人类中的父子关系

使用fork函数创建一个进程

fork函数就是创建一个进程,这里要知道的是哪一个是父进程,哪一个是子进程;

fork函数创建成功后,那么在fork后面就产生了一个子进程,所以这个时候是有两个进程在跑的

我们可以在fork后面判断,看看返回值来

进行判断是什么进程!

getpid() 这个函数是c标准库

上面照片里面的read返回值是0,代表了是子进程;

旧linux储存地址分配:

fork创建子进程的一般目的是什么?

服务器 和 客户端 的关系。服务器等待客户端的 连接。有一个连接就创建一个子进程去帮助客户端。再来一个客户端连接,再创建一个子进程…

类似场景:你爸爸负责在酒店门口等待客人的到来,来一个你爸爸就创出一个儿子,让这个儿子去招待这位客人,再来一个客人就再创一个儿子,让这个儿子去招待这位客人。

vfork函数也可以创建进程,vfork 和 fork 有什么区别

  1. 关键区别1.vfork直接用父进程的存储空间,不拷贝。

  2. 关键区别2.vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。(用break退出会影响数据)

进程退出正常退出main函数调用return 进程调用exit();标准c库 进程调用_exit() 或者 _Exit() 属于系统调用。 进程最后一个线程返回 最后一个线程调用pthread_exit.

异常退出调用abort 当进程收到某些信号时,比如Ctrl + C 最后一个线程对取消(cancellation)请求作出响应。

wait、waitpid、waitid

wait功能父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

wait参数

是一个整型数指针

非空:子进程退出状态放在它所指向的地址中 空(NULL):不关心退出状态

总结:

  1. 通过wait函数 因为是exit正常退出 我们得用 WEXITSTATUS 宏来查出exit的值。
  2. 用了wait函数,我们进程不是父进程和子进程一起跑了,而是等待子进程结束,收集子进程的值再执行父进程。如果没有子进程,则立即出错返回

wait 和 waitpid 的区别

  1. wait 使调用者阻塞(子进程不结束,就一直不会运行父进程)
  2. waitpid 有一个选项可以使调用者不阻塞
  3. pid:

  4. options:

孤儿进程

父进程如果不等待子进程的退出,在子进程之前就“结束”了自己的生命,此时子进程叫孤儿进程。Linux 避免系统存在过多的孤儿进程,init 进程收留孤儿进程,变成孤儿进程的父进程。

特殊情况:在Ubuntu中孤儿进程是被 systemd 的 user 收留的,而不是被init,所以有时候 getppid() 可能不为1

getppid

getppid头文件及原型

#include<unistd.h>

pid_t getppid(void);

getppid函数说明

getppid() 用来取得目前进程的父进程识别码。

getppid返回值

目前进程的父进程识别码。

竞态概念:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值