linux下终端不动,检测进程的状态

前言:

复制代码
    今天在cp一个文件夹的时候,终端一直卡这不动,我不确定是卡了,还是复制时间太常了。所以我在想有没有一个办法检测一个进程的状态,我想知道这个进程是卡死了,还是在工作,只不过没有打印信息。

    对于cp这个指令,我可以实时的查看当前文件夹的大小,如果这个文件夹大小一直在变化,那么说明一直在复制。

    对于一些特殊的指令,比如自定义的shell指令,虽然他不会再终端上打印东西,但是会生成log,我们可以判断log是否更新来查看这个进程的状态。

    但是我考虑的不是这些,而是一些没有任何特征的进程。

一、 解决方案

1. 查看进程号

通过ps aux | grep "命令", 之后可以拿到对应的进程号,通过这个进程好,我们就可以判断这个进程的状态。

2.查看进程状态

bash 复制代码
top -p pid

发现这个进程处于R状态,基本没问题。
下面说消耗100%cpu资源,值得是单核cpu,我们还有很多核,所以上面还有94.6的空闲。

3. 其他的情况

如果进程处于S或者处于D,那么情况就有很多种了,下面慢慢分析。

bash 复制代码
strace -p PID
查看程序在调用什么
① futex → 等锁(非常常见 ❗)
复制代码
futex(0x..., FUTEX_WAIT, ...) = 0
👉 含义:
🔒 线程在等锁 / 同步
📌 典型场景:
多线程
multiprocessing
Python GIL / queue
👉 如果一直卡在 futex:
❗ 可能死锁
② read / write → IO操作
复制代码
read(3, ..., 1024)
write(1, ..., 6)
👉 含义:
read → 读文件 / 网络
write → 写文件 / 输出
👉 如果一直 read:
❗ 在等数据(文件 / socket)
③ poll / select / epoll → 等网络/事件
复制代码
poll([{fd=3, ...}], 1, -1)
👉 含义:
🌐 等 IO 事件(网络、socket)
👉 常见于:
服务器程序
RL worker通信
socket通信
④ nanosleep → sleep
复制代码
nanosleep({tv_sec=1, ...})

👉 含义:
😴 主动 sleep
👉 这是正常行为 ✔
⑤ wait4 → 等子进程
复制代码
wait4(-1, ...)

👉 含义:
👶 父进程在等子进程结束
⑥ open / close → 文件操作
复制代码
open("file.txt", ...)
👉 在访问文件
⑦ mmap → 内存分配
复制代码
mmap(...)
👉 分配内存(正常)
相关推荐
M78佐菲6 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
Brilliantwxx6 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做6 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
richdata7 小时前
商品数字化不是先做大数据,而是先把数据变成可用决策
大数据·运维·数据治理·商品数字化·智能补货·ai商品决策
weixin_416667967 小时前
【无标题】
运维·服务器·网络
一池秋_8 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
惜离殇8 小时前
从零开始的敲代码生活--Linux应用软件(文件操作基础1)
linux·c语言·文件操作·标准io
上海云盾-小余10 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠10 小时前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件10 小时前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d