
Linux学习之旅之基础进程管理一、认识进程1、进程是什么进程是程序运行时由系统分配内存、CPU 等资源形成的运行实体受内核调度管理。2、进程的生命周期创建 → 就绪 → 运行 ↔ 阻塞 ↓ 终止→僵尸→父进程回收→销毁### 3、进程的状态 bash | 状态 (STAT) | 字母 | 含义 | 是否占用 CPU | 是否可被强制杀死 | | --------- | --- | -------------------- | ------------------------------ | ----------------- | | 运行 / 可运行 | R | 进程正在 CPU 执行或在队列中等待执行 | 是 (Rung)否 (Runnable) | 是 | | 可中断睡眠 | S | 等待某个事件完成睡眠可被中断 | 否 | 是 | | 不可中断睡眠 | D | 等待硬件 I/O睡眠不可被中断 | 否 | 否即使 kill -9 也无效 | | 已停止 | T | 进程执行被暂停挂起 | 否 | 是但需先恢复 | | 僵尸进程 | Z | 进程已终止但未被父进程 “收尸” | 否 | 否已死亡无法杀死 |二、进程基础命令静态1、ps命令静态ps 【选项】 参数选项作用a显示所有终端关联进程u输出 CPU、内存、STAT 等资源信息x显示无终端后台守护进程选项作用-e列出系统全部进程-f完整格式输出 PPID 父进程 ID-o自定义输出显示字段字段解释USER进程所属用户 PID进程 ID %CPU / %MEMCPU、内存占用率 VSZ虚拟内存 RSS实际物理内存 STAT进程状态对应你表格里 R/S/D/T/Z START进程启动时间 TIME累计 CPU 运行时长 COMMAND启动命令常见组合命令组合特点ps aux展示资源占用与进程状态ps -ef展示父子进程关系ps -eo自定义输出列实例xyxubt2604ser:~$ ps auxUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root19.01.02488416196? Ss 00:290:12 /usr/lib/systemd/systemd --switched-root--system--deserialize51root20.00.000? S 00:290:00[kthreadd]root30.00.000? S 00:290:00[pool_workqueue_release]root40.00.000? I00:290:00[kworker/R-rcu_gp]root50.00.000? I00:290:00[kworker/R-sync_wq]root60.00.000? I00:290:00[kworker/R-kvfree_rcu_reclaim]root70.00.000? I00:290:00[kworker/R-slub_flushwq]root80.00.000? I00:290:00[kworker/R-netns]root90.00.000? I 00:290:00[kworker/0:0-rcu_gp]实例xyxubt2604ser:~$ ps aux --sort-%mem | headxyxubt2604ser:~$psaux--sort-%mem|headUSERPID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root14680.12.012609232844? Ssl 00:290:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal root13490.11.94672430028? Ss 00:290:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers root9260.01.15064418616? Ss 00:290:00 /usr/lib/systemd/systemd-journald root12.21.02488416196? Ss 00:290:12 /usr/lib/systemd/systemd --switched-root--system--deserialize51root9810.20.94136415384? Ss 00:290:01 /usr/lib/systemd/systemd-udevd root13580.00.954333614972? Ssl 00:290:00 /usr/libexec/udisks2/udisksd systemd9800.00.92274414836? Ss 00:290:00 /usr/lib/systemd/systemd-resolved root14670.10.839160414056? Ssl 00:290:00 /usr/sbin/ModemManager xyx19480.00.82217612892? Ss 00:300:00 /usr/lib/systemd/systemd--user2、pstree命令pstree 【选项】 参数以树形结构展示进程父子依赖关系直观查看进程树区分父子进程、线程。参数作用-p显示每个进程对应的 PID-u显示进程所属用户-h高亮当前终端进程-T不展示线程只显示进程-t展开显示所有子线程-n按 PID 数字排序默认按启动顺序实例xyxubt2604ser:~$ pstree -p | grep nginxxyxubt2604ser:~$ pstree-p|grepnginx|-nginx(1427)--nginx(1430)|-nginx(1433)3、pgrep命令名称查找PID)实例[rootrockyser ~]# pgrep -l nginx-l 显示进程名称[rootrockyser ~]# pgrep -l nginx1200nginx1201nginx1202nginx4、lsof端口占用情况实例[rootrockyser ~]# lsof -i :22[rootrockyser ~]# lsof -i :22COMMAND PIDUSERFD TYPE DEVICE SIZE/OFF NODE NAME sshd1063root 7u IPv4122250t0 TCP *:ssh(LISTEN)sshd1063root 8u IPv6122270t0 TCP *:ssh(LISTEN)5、netstat/ss命令查看监听端口参数作用-a显示所有连接-t只查看 TCP-n用数字显示 IP 和端口不解析域名-l只查看监听中的端口-p显示占用端口的进程 PID 和名称需 root实例[rootrockyser ~]# ss -tnlpState Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN01280.0.0.0:220.0.0.0:* users:((sshd,pid1063,fd7))LISTEN05110.0.0.0:800.0.0.0:* users:((nginx,pid1202,fd6),(nginx,pid1201,fd6),(nginx,pid1200,fd6))LISTEN0128[::]:22[::]:* users:((sshd,pid1063,fd8))LISTEN0511[::]:80[::]:* users:((nginx,pid1202,fd7),(nginx,pid1201,fd7),(nginx,pid1200,fd7))LISTEN04096*:9090 *:* users:((systemd,pid1,fd78))[rootrockyser ~]#实例[rootrockyser ~]# netstat -tnlp不常使用[rootrockyser ~]# netstat -tnlpActive Internet connections(only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp000.0.0.0:220.0.0.0:* LISTEN1063/sshd: /usr/sbi tcp000.0.0.0:800.0.0.0:* LISTEN1200/nginx: master tcp600:::22 :::* LISTEN1063/sshd: /usr/sbi tcp600:::80 :::* LISTEN1200/nginx: master tcp600:::9090 :::* LISTEN1/systemd三、基础进程命令动态1、top命令样例xyxubt2604ser:~$ top | head -10top- 00:42:05 up12min,2users, load average:0.00,0.04,0.07Tasks:224total,1running,223sleeping,0stopped,0zombie %Cpu(s):0.0us,4.5sy,0.0ni,95.5id,0.0wa,0.0hi,0.0si,0.0st MiB Mem:1529.8total,888.8free,453.8used,338.4buff/cache MiB Swap:1845.0total,1845.0free,0.0used.1076.0avail Mem PIDUSERPR NI VIRT RES SHR S %CPU %MEM TIME COMMAND1root200248841619611760S0.01.00:12.23 systemd2root200000S0.00.00:00.07 kthreadd3root200000S0.00.00:00.00 pool_wo第一行解释字段含义15:30:22当前系统时间up 12d 4:15服务器已运行时长12 天 4 小时 15 分2 users当前登录终端用户数load average: 0.32,0.45,0.281 分钟、5 分钟、15 分钟系统平均负载负载值≈CPU 核心数为满负载临界点第二行解释字段含义total系统总进程数量runningR 态运行 / 就绪进程sleepingS 可中断睡眠进程stoppedT 暂停挂起进程zombieZ 僵尸进程大于 0 代表存在僵尸第三行解释字段含义ususer用户态 CPU 占用业务程序sysystem内核态 CPU 占用ninice低优先级进程占用ididle空闲 CPU越大越闲置waiowait ⚠️重点等待磁盘 IO 耗时wa 高代表磁盘阻塞、大量 D 进程hihard irq硬件中断 CPU 开销sisoft irq软中断 CPU 开销网络收发包ststeal虚拟化被宿主机抢占 CPU虚拟机专用第四行解释字段含义total整机总物理内存free完全空闲未使用内存used程序已占用内存buff/cache缓冲区 页缓存系统磁盘读写加速可回收第五行解释字段含义total交换分区总大小free空闲交换空间used已使用 Swap ⚠️预警数值持续上涨代表物理内存不足avail Mem系统可用内存free 可回收 cache真实剩余可用内存第六行解释字段说明PID进程 IDUSER运行进程的用户PR进程实时优先级内核调度优先级NInice 值用户可调优先级负数高优正数低优VIRT虚拟内存总量VSS包含程序、库、swap、共享内存RES常驻物理内存RSS进程实际占用物理内存SHR共享内存大小和其他进程共用的库内存S进程状态R/S/D/T/Z和 ps STAT 一致%CPU进程 CPU 使用率单核心满负载为 100%多核可超 100%%MEM进程占用整机物理内存百分比TIME进程累计占用 CPU 总时长COMMAND启动进程的完整命令 / 程序名按键选项按键功能P按 CPU 使用率降序默认M按内存 RES 占用降序N按 PID 数字升序T按 TIME 运行时长降序R反向排序升 / 降切换2、htop友好top下载[rootrockyser ~]# dnf -y install epel-release / dnf -y install htoprocky/redhat下载[rootrockyser ~]#apt -y install htop实例[rootrockyser ~]#htop3、kill命令常用参数参数写法信号名作用说明kill -1SIGHUP重新加载配置平滑重启进程nginx、mysql 常用kill -9SIGKILL强制杀死进程不可被捕获 / 忽略D 僵尸进程专用kill -15SIGTERM默认信号不带参数时优雅终止程序可保存数据退出kill -18SIGCONT恢复被暂停T 状态的进程配合 STOP 使用kill -19SIGSTOP暂停进程挂起 T 态程序冻结不释放资源实例kill -15 4399 (根据ps或top等进程查看命令pid终止所选进程)kill -9 4399 (非必要不使用)kill -1 4399 在生产环境一般使用应该自带的重新加载如systemctl reload nginx)四、前台和后台作业1、 后台运行[rootrockyser ~]# sleep 4399 [1]3718[rootrockyser ~]# jobs[1] 运行中sleep4399[rootrockyser ~]#2、ctrlz 暂停前台进程至后台[rootrockyser ~]# jobs[1] 运行中sleep4399[rootrockyser ~]# sleep 4499^Z[2] 已停止sleep4499[rootrockyser ~]# jobs[1]- 运行中sleep4399[2] 已停止sleep4499[rootrockyser ~]#3、jobs 查看后台作业[rootrockyser ~]# jobs[1]- 运行中sleep4399[2] 已停止sleep44994、fg 恢复前台运行[rootrockyser ~]# jobs[1]- 运行中sleep4399[2] 已停止sleep4499[rootrockyser ~]# fg 2sleep44995、bg 后台继续运行[rootrockyser ~]# jobs[1]- 运行中sleep4399[2] 已停止sleep4499[rootrockyser ~]# bg 2[2]sleep4499[rootrockyser ~]# jobs[1]- 运行中sleep4399[2] 运行中sleep4499[rootrockyser ~]#6、nohop注解默认情况下SSH 断开时Shell 会向所有子进程发送 SIGHUP 信号进程退出。 nohup 可以让进程忽略 SIGHUP 信号。[rootrockyser ~]# nohup sleep 4999 [3]3736nohup: 忽略输入并把输出追加到nohup.out[rootrockyser ~]# jobs[1]运行中sleep4399[2]- 运行中sleep4499[3] 运行中nohupsleep4999[rootrockyser ~]# exit注销[xyxrockyser ~]$su- root 密码 上一次登录2026年07月22日 星期三10:31:10 CST 于 tty1[rootrockyser ~]# jobs[rootrockyser ~]# ps aux | grep sleep 4999root37360.00.159842224pts/0 S16:310:00sleep4999root37790.00.166242192pts/0 S16:320:00grep--colorautosleep4999注使用nohup意外断开连接时进程不会停止五、进程优先级1、nice值范围| nice 值 | 优先级等级 | 权限 |390| ------ | ------- | ------- || -20 | 全局最高优先级 | root 专属 || -10 | 较高优先级 | root 专属 || 0 | 默认基准优先级 | 全部用户默认 || 10 | 较低优先级 | 普通用户可用 || 19 | 全局最低优先级 | 普通用户可用 |2、nice 指定优先级启动[rootrockyser ~]# nice -n 10 sleep 4399 [1]4115[rootrockyser ~]# ps -eo cmd,pid,ni |grep sleepsleep4399411510[rootrockyser ~]#3、renice 运行中调整优先级[rootrockyser ~]# renice -10 -p 41154115(process ID)old priority10, new priority-10[rootrockyser ~]# ps -eo cmd,pid,ni |grep sleepsleep43994115-10六、其他常用命令1、uptime 查看系统负载[rootrockyser ~]# uptime16:05:30 up7:30,2users, load average:0.03,0.01,0.00输出内容字段含义详细说明16:05:30当前系统时间服务器本地时间16 时 05 分 30 秒up 7:30系统运行时长服务器连续开机 7 小时 30 分钟未重启2 users在线登录用户数当前一共有 2 个终端会话登录服务器本地控制台 / SSH 远程等都统计在内load average: 0.03, 0.01, 0.00系统平均负载三个数值分别代表近 1 分钟、近 5 分钟、近 15 分钟CPU 等待队列平均进程数当前负载极低系统空闲无压力2、free查看内存[rootrockyser ~]# free -htotal usedfreeshared buff/cache available Mem:1.6Gi 512Mi 903Mi6.5Mi 445Mi1.1Gi Swap:2.0Gi 0B2.0Gi列名含义total物理内存总大小used程序已直接占用内存free完全空闲裸内存shared共享内存buff/cache缓冲区 页缓存available真正可用内存最关键指标列名含义total交换分区总容量硬盘虚拟内存used已经使用的 swap数值高代表内存不足、频繁换页卡顿free空闲 swap 空间3、lscpu查看cpu信息[rootrockyser ~]# lscpuArchitecture: x86_64 CPU op-mode(s):32-bit,64-bit Address sizes:45bits physical,48bits virtual Byte Order: Little Endian CPU(s):2On-line CPU(s)list:0,1Vendor ID: AuthenticAMD BIOS Vendor ID: AuthenticAMD Model name: AMD Ryzen53500U with Radeon Vega Mobile Gfx BIOS Model name: AMD Ryzen53500U with Radeon Vega Mobile Gfx CPU 2.1GHz BIOS CPU family:2CPU family:23Model:24Thread(s)per core:1Core(s)per socket:1Socket(s):2Stepping:1BogoMIPS:4191.98Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxs r sse sse2 syscall nx mmxext pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology tsc _reliable nonstop_tsc cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse 4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext ssbd ibpb vmmcall fsgsbase bmi1 avx2 s mep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 clzero arat overflow _recov succor Virtualization features: Hypervisor vendor: VMware Virtualization type: full Caches(sum of all): L1d:64KiB(2instances)L1i:128KiB(2instances)L2:1MiB(2instances)L3:8MiB(2instances)NUMA: NUMA node(s):1NUMA node0 CPU(s):0,1Vulnerabilities: Gather data sampling: Not affected Indirect target selection: Not affected Itlb multihit: Not affected L1tf: Not affected Mds: Not affected Meltdown: Not affected Mmio stale data: Not affected Old microcode: Not affected Regfiledata sampling: Not affected Retbleed: Mitigation;untrainedreturnthunk;SMT disabled Spec rstack overflow: Mitigation;SMT disabled Spec store bypass: Mitigation;Speculative Store Bypass disabled via prctl Spectre v1: Mitigation;usercopy/swapgs barriers and __user pointer sanitization Spectre v2: Mitigation;Retpolines;IBPB conditional;STIBP disabled;RSB filling;PBRSB-eIBRS Not affected;BHI Not affected Srbds: Not affected Tsa: Not affected Tsx async abort: Not affected Vmscape: Not affected Socket(s)2物理 CPU 插槽数量服务器主板插了2颗物理 CPU Core(s)per socket1每颗物理 CPU 内部有1个物理核心 Thread(s)per core1每个物理核心仅1个线程无超线程HT/SMT 物理核心总数Socket × Core per socket2×12核 逻辑 CPU线程总数Socket × Core × Thread per core2×1×12逻辑 CPU4、nproc查看cpu数[rootrockyser ~]# nproc2