进程与线程

1.进程

网络编程

进程(process):

进行中的程序 ----正在运行中的程序

进程 -- -程序的一次执行的过程

进程  是程序的一个实例

进程  vs  程序

程序是在内存中运行的

  1. 进程是跑起来的程序
  2. 一个程序可以对应多个进程

程序 --- 静态 --- 硬盘

进程 --- 动态 --- 内存

为什么需要进程?

单道程序

多道程序

为了描述和管理 程序运行 动态过程

进程

进程调度

操作系统为了 管理 程序的动态运行过程  ---  进程

PCB (process control block)

进程的组成

程序的组成

.c    程序源代码

a.out   可执行程序

Linux下程序在内存中的典型布局

Bss

Data

Text

可执行程序 a.out     进程 = Pcb + 进程实体(text/data/baa/堆栈)

Pid:process id//进程Id号

Pr:进程优先级

Nice:亲密度,亲密度越高优先级越高

S:status 状态

Top命令:Linux上的任务管理器

进程的生命周期

进程的状态

宏观并行,微观串行

浅度睡眠:是可以被打断的

深度睡眠:不可被打断

暂停:适用于调试阶段

僵死:进程实体已经结束,但pcb还在

Ps:

Ps aux | head -1  :ps aux是一个运行状态。|:管道符

                表示将前一个进程的运行效果传递给后面那个进程

Kill :杀死 --- 给进程发送信号

Eg:kill   -l  查看kill可以发送的信号

              -9  结束进程

              -18  继续运行

              -19  暂停

Kill all:可以指定进程名称。这种方式发送信号

前台进程组:

总结:1.进程概念

  1. 进程和程序
  2. 进程组成

  Pcb + text|data|baa|堆|栈 = 进程

进程状态:

三态  模型 ---- 操作系统理论

Linux系统:

R:运行或可运行  --就绪态

S:可中断的睡眠

D:不可中断的睡眠

T:暂停态

Z:僵尸态

进程的编程:

进程 --- 为了实现多任务

  1. 创建进程
  2. 进程的执行
  3. 进程结束
  4. 进程结束时资源的回收 ---- 僵尸态的处理

进程的创建

Fork()   //叉子 - 树杈

Pid_t  fork(void);             calling process:调用的函数

功能:

创建一个进程(child  process子进程)

通过复制 调用进程复制的子进程 复制的是进程的实体text|data|bss|堆栈

返回值:
成功:

    在父进程中,返回 子进程的pid号

    在子进程中,返回0

失败:

    -1 并且没有 子进程被创建0

注:pid号 实际上是一个 非负 整数

最小的pid号是 ----0

Fork一次调用,分别在子进程与父进程之间反回了一个值

注意:

1.在32为操作系统中,每一个进程都拥有独立的4G空间(虚拟的)

2.每个进程运行在各自独立的4G内存空间中

3.父子进程间,数据相互独立,互不影响

4.父子进程运行的顺序,不确定  取决于操作系统 --- 先调度谁

Getpid()获取当前所在进程的pid号

   输出重定向

干掉父进程,只留下子进程,那么子进程就会被系统收养(32为系统init,64为系统systemd),从而成为后台进程,此时无法在终端进行操作结束子进程

n次fork,就生成2^n个进程

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值