一、Linux程序与进程
1、程序,进程,线程的概念
-
程序:是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务,是静态的;
-
进程:是运行着的程序,是操作系统执行的基本单位,是程序运行的过程, 是动态的,是有生命周期及运行状态的。是操作系统分配内存、CPU时间片等资源的基本单位。
-
线程:是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
2、程序和进程的区别
-
程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程;
-
进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程;
-
进程还具有并发性和交往性,而程序却是封闭的。
3、进程和线程的区别
-
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发拥有多个线程,而一个线程同时只能被一个进程所拥有;
-
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
二、Linux进程基础(生命周期)
1、进程生命周期
-
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID(PID),PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程。
-
所有进程都是第一个系统进程的后代:在centos6中,第一个系统进程是init,而在centos7中,第一个系统进程是systemd。
2、父子进程的关系
-
子进程由父进程产生,在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。
-
运行过程:子进程运行时父进程休眠。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境后,剩余释放不掉的资源称之为僵尸进程。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
三、进程查看命令
1. pstree:可视化进程树关系
pstree命令能直观展示进程间的父子关系,清晰呈现谁创建了谁。
基本用法:
pstree [选项]

常用选项:
-A:用 ASCII 码字符连接进程树

-U:用 UTF8 字符连接进程树(部分终端可能兼容问题)

-p:同时显示每个进程的 PID(推荐常用)

-u:同时显示进程所属账号名称

2. ps:静态查看进程快照
ps命令用于显示系统当前进程的瞬间运行状态,是最常用的进程查看工具之一。
基本用法:
bash
ps [选项]
核心选项组合:
ps aux:显示所有进程的详细信息(最常用)

ps -efj:查看进程父子关系

ps -elf:长格式显示所有进程的完整信息

ps aux输出解析:
| 字段 | 含义 |
|---|---|
| USER | 进程所有者 |
| PID | 进程唯一 ID |
| %CPU | 进程占用 CPU 百分比 |
| %MEM | 进程占用内存百分比 |
| VSZ | 虚拟内存大小 |
| RSS | 物理内存大小 |
| TTY | 进程所在终端 |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | 累计 CPU 时间 |
| COMMAND | 启动命令 |
进程状态(STAT)详解
进程状态是理解进程行为的关键,ps命令输出的STAT列包含丰富信息:
| 状态码 | 含义 | 说明 |
|---|---|---|
| R | 运行中 | 进程正在运行或在运行队列中 |
| S | 可中断睡眠 | 等待事件(如 I/O),可被信号唤醒 |
| D | 不可中断睡眠 | 等待硬件 I/O,不能被信号唤醒 |
| T | 已停止 | 被信号暂停或正在调试 |
| Z | 僵尸进程 | 进程已终止,父进程未回收资源 |
| I | 空闲 | 内核线程空闲状态 |
| < | 高优先级 | nice 值为负,优先级高 |
| N | 低优先级 | nice 值为正,优先级低 |
| s | 会话领导者 | 如 bash 终端进程 |
| l | 多线程 | 如 nginx 等多线程程序 |
| + | 前台进程 | 属于前台进程组 |
常见状态组合:
Ss:会话领导者处于可中断睡眠(如 bash)R+:前台运行的进程(如 top 命令)Z:僵尸进程(需要处理的异常状态)
3. pgrep:精准查找进程 ID
pgrep通过程序名匹配进程,常与kill配合使用。
基本用法:
pgrep [选项] 进程名
常用选项:
-l:同时显示进程名和 PID-o:显示匹配进程中 PID 最小的-n:显示匹配进程中 PID 最大的
示例:
pgrep -l nginx # 查找nginx进程并显示PID和名称
4. top/htop:动态监控进程
top:系统自带的动态进程监控工具

htop:top 的增强版,提供更友好的交互界面
安装 htop:
yum install epel-release -y
yum install htop -y
常用操作:
-d 5:每隔 5 秒更新一次-p 1234:监控指定 PID 的进程-u root:监控指定用户的进程- 按键
P:按 CPU 使用率排序 - 按键
M:按内存使用率排序 - 按键
q:退出监控
四、进程管理命令
1. kill:发送信号终止进程
kill命令通过发送信号来控制进程,默认发送SIGTERM(15)信号请求进程正常终止。
基本用法:
kill [选项] PID
关键选项:
-9:发送SIGKILL信号,强制终止进程(无法被忽略)-s:发送指定的信号-0:检测进程是否存在(不发送信号)
常用:
| 信号名称 | 作用 |
|---|---|
| SIGHUP | 终端挂起或者控制进程结束时发出的信号,通常用于通知守护进程重新读取配置文件等。 |
| SIGINT | 键盘中断信号,通常由用户按下 Ctrl+C 产生,用于终止正在运行的程序。 |
| SIGQUIT | 键盘退出信号,通常由用户按下 Ctrl+\ 产生,用于使程序异常退出并产生核心转储文件(如果可能)。 |
| SIGILL | 非法指令信号,表示程序执行了一条非法的机器指令。 |
| SIGTRAP | 跟踪陷阱信号,用于调试程序,通常由断点触发。 |
| SIGABRT | 异常终止信号,通常由程序内部的 abort 函数调用产生。 |
| SIGBUS | 总线错误信号,通常表示访问内存时出现了总线错误。 |
| SIGFPE | 浮点运算异常信号,例如除以零等浮点运算错误。 |
| SIGKILL | 强制终止信号,无法被捕获或忽略,用于立即终止进程。 |
| SIGUSR1 | 用户自定义信号 1,留给用户程序自定义用途。 |
| SIGSEGV | 内存访问越界信号,通常表示程序尝试访问非法的内存地址。 |
| SIGUSR2 | 用户自定义信号 2,留给用户程序自定义用途。 |
| SIGPIPE | 管道破裂信号,当进程向一个没有读端的管道写入数据时产生。 |
| SIGALRM | 闹钟信号,通常由 alarm 函数设置的定时器超时产生。 |
| SIGTERM | 终止信号,是 kill 命令默认发送的信号,用于请求程序正常终止。 |
| SIGSTKFLT | 协处理器栈错误信号,在某些特定架构的系统上使用。 |
| SIGCHLD | 子进程状态改变信号,当子进程终止、暂停或继续运行时,父进程会收到此信号。 |
| SIGCONT | 继续执行信号,用于使暂停的进程继续运行。 |
| SIGSTOP | 暂停进程信号,无法被捕获或忽略,用于暂停进程的执行。 |
| SIGTSTP | 终端停止信号,通常由用户按下 Ctrl+Z 产生,用于暂停前台进程的运行。 |
| SIGTTIN | 后台进程从控制终端读取数据时收到的信号。 |
| SIGTTOU | 后台进程向控制终端写入数据时收到的信号。 |
| SIGURG | 紧急数据到达信号,通常用于网络编程中表示有紧急数据需要处理。 |
| SIGXCPU | 超过 CPU 时间限制信号,表示进程超过了设定的 CPU 使用时间限制。 |
| SIGXFSZ | 超过文件大小限制信号,表示进程试图扩大文件超过了系统限制。 |
| SIGVTALRM | 虚拟定时器信号,用于在虚拟时间内设置定时器超时。 |
| SIGPROF | 性能分析定时器信号,用于性能分析工具。 |
| SIGWINCH | 窗口大小改变信号,当终端窗口大小发生改变时产生。 |
| SIGIO | 异步 I/O 信号,表示异步 I/O 事件发生。 |
| SIGPWR | 电源故障信号,在某些系统上表示电源状态发生变化。 |
| SIGSYS | 系统调用错误信号,表示进程执行了一个无效的系统调用。 |
| SIGRTMIN | 实时信号的最小值。 |
| 35 - 64 | SIGRTMIN+1 至 SIGRTMAX 是一系列的实时信号,用于实时应用程序中的优先级信号传递等 |
2. pkill 与 killall:按名称终止进程
当需要批量终止同一类进程时,pkill和killall更高效:
用法:
pkill [选项] 进程名
killall [选项] 进程名
示例:
pkill nginx # 终止所有nginx进程
killall -9 php-fpm # 强制终止所有php-fpm进程
五、进程类型
1、前台进程
在终端界面运行的进程,运行前台进程后,终端无法操作
#将前台进程放到后台运行
firefox &
#注意:该运行前台进程的方式,当终端关闭时,进程也会随着关闭
nohup firefox & #关闭终端,进程不掉
#查看
jobs
#将进程调到前台运行
fg 1
#将正在运行的前台进程放到后台运行
ctrl + z
bg 1

2、后台进程
驻留在后端运行的进程
3292

被折叠的 条评论
为什么被折叠?



