linux进程

一、进程的基本概念

  1. 进程的定义

    • 进程是一个程序执行的过程,会分配内存资源,并接受 CPU 的调度。
    • 进程由程序代码、数据和进程控制块(PCB)组成。
  2. 进程与程序的区别

    • 程序是静态的,存储在硬盘中的代码和数据集合;进程是动态的,是程序的执行过程。
    • 程序永存,进程是暂时的。
    • 进程有状态变化,程序没有。
    • 进程可以并发,程序无并发。
    • 进程之间会竞争计算机资源,一个程序可以运行多次成为多个进程。

二、进程的作用

进程的主要作用是实现并发,提高系统资源的利用率和系统的处理能力。

三、进程的分类

  1. 交互式进程:如 shell 进程。
  2. 批处理进程:如 shell 脚本、.bat 文件。
  3. 守护进程(后台进程)。

四、进程的状态

  1. 基本操作系统中的 3 个状态:就绪→执行态→阻塞(等待、睡眠)。
  2. Linux 中的状态:运行态(R)、睡眠态(可唤醒等待态 S、不可唤醒等待态 D)、僵尸态(Z)、暂停态(T)、结束态。

五、进程的调度

内核的主要功能之一是完成进程调度,宏观上并行,微观上串行。

六、Linux 中进程的管理

  1. Linux 中的 PCB(process control block)

    • PCB 是一个结构体 task_struct,包含进程标识符(PID)、父进程 ID 号(PPID)、当前工作路径、umask、进程打开的文件列表、信号相关设置、用户 ID 和组 ID、进程资源的上限等信息。
    • 一个程序运行后,默认打开三个文件:stdinstdoutstderr
  2. 进程的一生

    • 创建进程。
    • 执行任务,包括与父进程相同的任务(如淘宝)通过 fork 实现,或者有自己的任务(如 shell 执行命令)通过 fork + exec 实现。
    • 进程结束,可能产生孤儿进程(没有父亲)或僵尸进程(有父亲但自己先挂了)。

七、查询进程相关命令

  1. ps aux | grep 进程名:查看进程相关信息,包括就绪态、运行态(R)、睡眠态、等待态、停止态(T)、僵尸态(Z)、结束态。
  2. top:根据 CPU 占用率查看进程相关信息。
  3. kill 和 killall:发送信号来控制进程,kill PID 发送信号给指定 PID 的进程,默认接收者关闭;kill -9 进程 PID 号 强制关闭进程;kill -l 查看信号列表;killall -9 进程名 发送信号给指定进程名对应的所有进程。
  4. pstree -sp [pid 号]:查看某个进程的父子关系。

八、进程相关原语和函数

  1. fork() 函数

    • 一次调用,返回两次。子进程先运行还是父进程先运行顺序不确定,变量不共享。
    • 子进程复制父进程的 0 到 3G 空间和父进程内核中的 PCB,但 ID 号不同。
    • 在父进程中成功返回值是子进程的 PID 号(>0),失败返回 -1;在子进程中成功返回值 0,失败无。
  2. getpid 函数

    • pid_t getpid(void):获得调用该函数进程的 PID。
  3. getppid 函数

    • pid_t getppid(void):获得调用该函数进程的父进程 PID 号。

九、进程的应用场合

  1. 一个进程希望复制自己,使父子进程同时执行相同的代码段,常见于网络服务中。
  2. 一个进程需要执行一个不同的程序,通过 fork + exec 实现。

十、进程操作文件

设计程序动态生成两个进程分别向相同文件写入不同数据时,需注意父子进程操作同一文件,可通过 open 打开文件,fork 创建进程,在不同的进程分支中通过 sprintf 和 write 写入数据,并使用 getpid 获取进程 ID 及时间来标识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值