JackCin's blog JackCin's blog
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

JackCin

前端小菜鸡(✪ω✪)
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Linux系统编程入门

  • Linux 多进程开发

    • 进程概述
    • 进程状态转换
      • 1、进程的状态
      • 2、查看进程
        • 2.1 ps aux
        • 2.2 ps ajx
        • 2.3 stat参数的含义
        • 2.4 实时显示进程动态
        • 2.5 杀死进程
        • 2.6 后台运行
      • 3、进程号和相关函数
    • 进程创建
    • 进程控制
    • 进程间通信
    • 进程间通信补充
    • 信号
    • 共享内存
    • 守护进程
  • Linux 多线程开发

  • Linux 网络编程

  • Linux
  • Linux 多进程开发
JackCin
2023-09-12
目录

进程状态转换

# 进程状态转换

# 1、进程的状态

  • 进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。
    • 在三态模型中,进程状态分为三个基本状态,即就绪态,运行态,阻塞态。
  • 运行态:进程占有处理器正在运行
  • 就绪态:进程具备运行条件,等待系统分配处理器以便运 行。当进程已分配到除CPU以外的所有必要资源后,只要再 获得CPU,便可立即执行。在一个系统中处于就绪状态的进 程可能有多个,通常将它们排成一个队列,称为就绪队列
  • 阻塞态:又称为等待(wait)态或睡眠(sleep)态,指进程 不具备运行条件,正在等待某个事件的完成

三态模型

  • 在五态模型 中,进程分为新建态、就绪态,运行态,阻塞态,终止态。
  • 新建态:进程刚被创建时的状态,尚未进入就绪队列
  • 终止态:进程完成任务到达正常结束点,或出现无法克服的错误而异常终止,或被操作系统及 有终止权的进程所终止时所处的状态。进入终止态的进程以后不再执行,但依然保留在操作系 统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。

# 2、查看进程

  • ps aux / ajx
    • a:显示终端上的所有进程,包括其他用户的进程
    • u:显示进程的详细信息
    • x:显示没有控制终端的进程
    • j:列出与作业控制相关的信息
  • 打印出来的信息是当前时间点的进程信息,相当于快照

# 2.1 ps aux

ps-aux

  • 每列对应的意思是:
  • USER : 进程所属用户
  • PID : 进程id
  • %CPU :cpu使用率
  • %MEM : 内存使用率 ,
  • (VSZ 和 RSS没说)
  • TTY : 当前进程所属终端 ,可以直接在终端输入 tty查看当前所对应终端
  • STAT : 状态
 STAT参数意义:
	D 不可中断 Uninterruptible(usually IO)
	R 正在运行,或在队列中的进程
	S(大写) 处于休眠状态
	T 停止或被追踪
	Z 僵尸进程
	W 进入内存交换(从内核2.6开始无效)
	X 死掉的进程
	< 高优先级
	N 低优先级
	s 包含子进程
	+ 位于前台的进程组

1
2
3
4
5
6
7
8
9
10
11
12
13
  • start : 开始时间
  • COMMAND : 执行了什么命令,执行什么命令产生的进程
    • 看上图最后一条命令就知道,外面是用 ps aux 命令生成了这个进程

# 2.2 ps ajx

ps-ajx

  • 每列对应的意思是:

    • 父进程id
    • 进程id
    • 进程组id
    • 会话组id
    • tty 当前进程所属终端
    • 。。。

# 2.3 stat参数的含义

 STAT参数意义:
	D 不可中断 Uninterruptible(usually IO)
	R 正在运行,或在队列中的进程
	S(大写) 处于休眠状态
	T 停止或被追踪
	Z 僵尸进程
	W 进入内存交换(从内核2.6开始无效)
	X 死掉的进程
	< 高优先级
	N 低优先级
	s 包含子进程
	+ 位于前台的进程组

1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.4 实时显示进程动态

(19条消息) linux下top指令参数详解及用法_linux top参数_亿只猪儿虫的博客-CSDN博客 (opens new window)

  • top
  • 可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔,在 top 命令 执行后,可以按以下按键对显示的结果进行排序:
    • M 根据内存使用量排序
    • P 根据 CPU 占有率排序
    • T 根据进程运行时间长短排序
    • U 根据用户名来筛选进程
    • K 输入指定的 PID 杀死进程
    • q 退出

top命令-实时显示进程动态

# 2.5 杀死进程

  • kill [-signal] pid
  • kill命令默认的信号是15,即kill -15,此时系统发送一个SIGTERM的信号给对应程序,当程序接收到该信号后,具体如何处理是自己可以决定的(可结束,可忽略),结束前一般会进行一些"准备工作"。由于SIGTERM(15)的信号可以被阻塞和忽略,这也导致有时候使用kill命令没办法"杀死"应用;
  • 9 号信号能够强制杀死进程,系统会发出SIGKILL信号,要求接收到该信号的程序立即结束运行,不能被阻塞或忽略,这通常会带来一些副作用,因为应用程序没有时间进行"准备工作",可能造成数据丢失或者终端无法恢复到正常状态等;

kill-杀死进程

  • kill –l 列出所有信号

kill--l查看信号

  • kill –SIGKILL 进程ID / kill -9 进程ID(可以直接写宏,也可以写对应的信号值)
  • 下图,在自己终端,杀死自己终端是不成功的,必须加 -9 来强制杀死进程

kill-强制杀死进程

  • killall name 根据进程名杀死进程
    • 这里要注意写入命令的当前路径,比如在终端2里删除,但是这时我们已经进入到了Linux目录下,那我们就应该这样写: killall ./a.out

killall-name杀死进程

# 2.6 后台运行

  • 有时我们可以使用 可执行文件 & 这样的命令让程序在后台运行,但是显示到终端
    • 下图,第一次运行,就是前台运行,这样如果我们不杀死这个进程,我们就不能输入其他命令
    • 所以,后台运行的好处就是可以在执行其他进程的同时,进行写入指令

后台运行

# 3、进程号和相关函数

  • 每个进程都由进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。 进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。
  • 任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程, 对应的进程号称为父进程号(PPID)。
  • **进程组是一个或多个进程的集合。**他们之间相互关联,进程组可以接收同一终端的各 种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当前的进程组号。
  • 进程号和进程组相关函数:
    • pid_t getpid(void);
    • pid_t getppid(void);
    • pid_t getpgid(pid_t pid);
编辑 (opens new window)
上次更新: 2023/09/13, 12:29:52
进程概述
进程创建

← 进程概述 进程创建→

最近更新
01
51单片机及补充知识
09-13
02
独立按键
09-13
03
LCD1602液晶显示器
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式