二、进制状态转换

补充知识点

1. tty 命令

  • 全称
    tty = Teletype(电传打字机,早期电脑的输入输出设备)
  • 命令作用
    显示你当前正在使用的终端设备文件名。

    当我们执行 ps aux 时,如果有多个终端同时开的情况,就会无法找到想要杀死进程的进程 ID ,这里输出结果 TTY 的那一列就对应着 tty 命令打印的终端设备文件名,这样就可以准确杀死进程了。

进制的状态

进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。在三态模型中,进程状态分为三个基本状态,即就绪态,运行态,阻塞态。在五态模型中,进程分为新建态、就绪态,运行态,阻塞态,终止态。

三态模型

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

五态模型

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

进程相关命令

查看进程

ps 命令⽤于查看系统进程信息,process 的缩写。

  • 常⽤参数组合
    • ps aux:显示所有⽤户进程详细信息。
    • ps ajx:显示作业控制相关信息。
  • 参数详解
    • ps:全称 Process Status ,进程状态。
    • a:显示终端上的所有进程,包括其他用户的进程。
    • u:显示进程的详细信息。
    • x:显示没有控制终端的进程。
    • j:列出与作业控制相关的信息。

ps aux 演示:

  • 输出字段:
    • USER:进程所属⽤户
    • PID:进程 ID
    • %CPU:CPU使⽤率
    • %MEM:内存使⽤率
    • TTY:所属终端
    • STAT:进程状态
    • START:启动时间
    • TIME:运⾏时间
    • COMMAND:执⾏的命令

ps ajx 演示:

  • 输出字段:
    • PPID:父进程 ID
    • PID:进程 ID
    • PGID:进程组 ID
    • SID:会话 ID
    • TTY:所属终端
    • TPGID:前台进程组 ID
    • STAT:进程状态
    • UID:用户 ID
    • TIME:运行时间
    • COMMAND:执行的命令

STAT 状态码

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

实时显示进程动态

top 命令动态显示进程信息,默认按 CPU 使用率从高到低排序,三秒刷新一次。

可以在使用 top 命令时加上 -d 来指定显示信息更新的时间间隔,在 top 命令执行后,可以按以下按键对显示的结果进行排序:

快捷键 功能说明
M 根据内存使用量排序
P 根据 CPU 占有率排序
T 根据进程运行时间长短排序
U 根据用户名来筛选进程
K 输入指定的 PID 杀死进程

杀死进程

kill命令终⽌指定进程

bash 复制代码
kill [-signal] pid

常用方式

  • kill --l:列出所有信号。
  • kill --SIGKILL:强制终止进程。
  • kill -9:强制终止进程 (SIGKILL 是信号 9 的宏)。
  • killall name:根据进程名杀死进程。

注意事项

  • 普通⽤户只能终⽌⾃⼰的进程。
  • 前台进程需要 -9 参数强制终⽌。
  • 终端进程终⽌会导致连接断开。

后台进程

  • 命令后加 & 可使进程在后台运⾏。
  • 如果进程有输出仍会输出到当前终端,但此时可以在终端执行其他命令。

创建一个 a.c 程序:

c 复制代码
#include <stdio.h>
#include <unistd.h>
int main()
{
     while(1)
     {
          printf("hello\n");
          sleep(5);
     }
        
     return 0;
}

编译并后台运行该程序:

bash 复制代码
gcc a.c
./a.out &

这里可以看到终端依然在输出,但当我杀死无限循环的进程后就不再输出 hello 了:

进程号和相关函数

  • 每个进程都由进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。
    进程号总是唯一的,但可以重用。当一个进程终止后,其进程号就可以再次使用。
  • 任何进程(除 init 进程)都是由另一个进程创建,该进程称为被创建进程的父进程,
    对应的进程号称为父进程号(PPID)。
  • 进程组是一个或多个进程的集合。他们之间相互关联,进程组可以接收同一终端的各
    种信号,关联的进程有一个进程组号(PGID)。默认情况下,当前的进程号会当做当
    前的进程组号。
  • 进程号和进程组相关函数:
    • pid_t getpid(void); 获取当前进程 ID
    • pid_t getppid(void); 获取父进程 ID
    • pid_t getpgid(pid_tpid); 获取进程组 ID
相关推荐
Uncertainty!!18 分钟前
Ubuntu 22.04 安装超好用中文输入法rime-ice(雾凇拼音)过程记录
linux·ubuntu·中文输入法
gugucoding1 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ShineWinsu1 小时前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp
Asuicao1 小时前
centos7.9版本升级ssh OpenSSH 9.8p1 源码 OpenSSL 1.1.1w 源码包以及安装升级回滚文档
运维·ssh
耍酷的魔镜2 小时前
谈谈如何使用Netty开发实现高性能的RPC服务器
服务器·网络协议·rpc
志栋智能2 小时前
超自动化安全中的威胁狩猎
运维·安全·自动化
↘"LYong2 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
Zhang~Ling3 小时前
Vim 多模式详解:命令、插入、底行与插件配置
linux·编辑器·vim
Elastic 中国社区官方博客3 小时前
Elastic 在 Everest Group 企业搜索产品 PEAK Matrix® 评估 2026 中被评为领导者
大数据·运维·人工智能·elasticsearch·搜索引擎·ai·全文检索
程序员在囧途3 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费