在 Linux 下,如果你想动态监测指定命令的运行情况,可以使用以下命令或工具来实现:
1. watch 命令
watch 命令可以定期执行指定的命令,并动态显示其输出结果。
语法:
watch [选项] 命令示例:
- 每隔 2 秒动态查看
ps命令的输出:watch -n 2 "ps aux | grep my_command" - 监测某个进程的 CPU 和内存使用情况:
watch -n 1 "ps -p <PID> -o %cpu,%mem,cmd"
常用选项:
-n <秒数>:指定刷新间隔时间(默认 2 秒)。-d:高亮显示变化的输出。
2. top 命令
top 是一个实时动态查看系统进程和资源使用情况的工具。
语法:
top示例:
- 查看某个命令的进程资源占用:
- 运行
top。 - 按
c显示完整的命令名称。 - 按
k并输入进程 PID,可以终止进程。
- 运行
常用操作:
- 按
P:按 CPU 使用率排序。 - 按
M:按内存使用率排序。 - 按
q:退出top。
3. htop 命令
htop 是 top 的增强版,提供了更友好的交互界面和更多功能。
语法:
htop示例:
- 使用
htop查看进程:htop - 按
F4过滤进程名称,输入命令名称即可。
常用操作:
- 按
F3:搜索进程。 - 按
F5:树状显示进程。 - 按
F9:终止进程。
4. strace 命令
strace 可以动态跟踪指定命令的系统调用和信号。
语法:
strace [选项] 命令示例:
- 跟踪
ls命令的系统调用:strace ls - 跟踪某个进程的系统调用:
strace -p <PID>
常用选项:
-p <PID>:跟踪指定进程。-f:跟踪子进程。-e trace=<系统调用>:只跟踪特定的系统调用。
5. lsof 命令
lsof 可以动态查看指定命令或进程打开的文件和网络连接。
语法:
lsof [选项]示例:
查看某个命令打开的文件:
lsof -c <命令名称>查看某个进程打开的文件:
lsof -p <PID>lsof -i: <port>常用选项:
-c <命令名称>:查看指定命令打开的文件。-p <PID>:查看指定进程打开的文件。
6. nmon 工具
nmon 是一个实时系统性能监测工具,可以动态查看 CPU、内存、磁盘、网络等资源使用情况。
安装:
sudo apt install nmon # Ubuntu/Debian
sudo yum install nmon # CentOS/RHEL使用:
nmon常用操作:
- 按
c:查看 CPU 使用情况。 - 按
m:查看内存使用情况。 - 按
d:查看磁盘 I/O。
7. ps 命令结合 grep
ps 可以查看进程状态,结合 grep 可以过滤出指定命令的进程。
示例:
- 查看某个命令的进程状态:
ps aux | grep my_command - 动态监测某个命令的进程状态:
while true; do ps aux | grep my_command; sleep 1; done
8. dstat 命令
dstat 是一个多功能的系统资源统计工具,可以动态监测 CPU、内存、磁盘、网络等。
安装:
sudo apt install dstat # Ubuntu/Debian
sudo yum install dstat # CentOS/RHEL使用:
dstat常用选项:
-c:显示 CPU 使用情况。-m:显示内存使用情况。-d:显示磁盘 I/O。
总结
- 如果你需要简单实时监测命令的输出,使用
watch。 - 如果你需要监测系统资源和进程,使用
top或htop。 - 如果你需要跟踪命令的系统调用,使用
strace。 - 如果你需要查看命令打开的文件,使用
lsof。
根据你的需求选择合适的工具即可!
strace 是一个非常强大的工具,用于跟踪进程的系统调用和信号。如果你觉得 strace 有用,还有一些类似的工具可以满足不同的需求,以下是一些功能类似的命令和工具:
1. ltrace
ltrace 用于跟踪进程对动态库函数的调用(如 glibc 中的函数)。
语法:
ltrace [选项] 命令示例:
- 跟踪
ls命令的库函数调用:ltrace ls - 跟踪某个进程的库函数调用:
ltrace -p <PID>
常用选项:
-p <PID>:跟踪指定进程。-f:跟踪子进程。-e <函数>:只跟踪特定的函数。
2. perf
perf 是 Linux 内核提供的性能分析工具,可以跟踪系统调用、CPU 事件、硬件性能计数器等。
语法:
perf [选项] 命令示例:
- 跟踪某个命令的系统调用:
perf trace ls - 跟踪某个进程的 CPU 事件:
perf stat -p <PID>
常用子命令:
perf trace:跟踪系统调用。perf stat:统计性能事件。perf record:记录性能数据。perf report:分析性能数据。
3. gdb
gdb 是一个强大的调试工具,可以跟踪进程的执行流程,包括系统调用、信号、断点等。
语法:
gdb [选项] 可执行文件示例:
- 调试一个程序并跟踪系统调用:
在gdb ./my_programgdb中使用catch syscall命令来捕获系统调用。
常用命令:
break:设置断点。run:运行程序。backtrace:查看调用栈。catch syscall:捕获系统调用。
4. sysdig
sysdig 是一个强大的系统监控和故障排查工具,可以捕获系统调用、文件操作、网络活动等。
安装:
sudo apt install sysdig # Ubuntu/Debian
sudo yum install sysdig # CentOS/RHEL语法:
sysdig [选项]示例:
- 捕获所有系统调用:
sysdig - 捕获某个命令的系统调用:
sysdig proc.name=ls - 捕获某个进程的文件操作:
sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
常用选项:
-p <格式>:自定义输出格式。-c <chisel>:使用内置的 chisel(脚本)进行分析。-w <文件>:将捕获的数据保存到文件。
5. bpftrace
bpftrace 是基于 eBPF 的高级跟踪工具,可以动态监控系统调用、内核函数、用户空间函数等。
安装:
sudo apt install bpftrace # Ubuntu/Debian
sudo yum install bpftrace # CentOS/RHEL语法:
bpftrace [选项] 脚本示例:
- 跟踪所有
open系统调用:bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }' - 跟踪某个进程的系统调用:
bpftrace -e 'tracepoint:syscalls:sys_enter_open /pid == <PID>/ { printf("%s %s\n", comm, str(args->filename)); }'
常用功能:
- 跟踪内核函数。
- 跟踪用户空间函数。
- 动态生成性能报告。
6. dtruss(macOS)
dtruss 是 macOS 上的工具,类似于 strace,用于跟踪系统调用。
语法:
dtruss [选项] 命令示例:
- 跟踪
ls命令的系统调用:dtruss ls
7. procmon(Windows)
procmon 是 Windows 上的工具,可以监控文件系统、注册表、网络活动等。
8. trace-cmd
trace-cmd 是 Linux 内核的跟踪工具,用于捕获和分析内核事件。
安装:
sudo apt install trace-cmd # Ubuntu/Debian
sudo yum install trace-cmd # CentOS/RHEL语法:
trace-cmd [选项]示例:
- 捕获内核事件:
trace-cmd record -e syscalls - 分析捕获的数据:
trace-cmd report
总结
- 如果你需要跟踪库函数调用,使用
ltrace。 - 如果你需要性能分析,使用
perf。 - 如果你需要调试程序,使用
gdb。 - 如果你需要高级系统监控,使用
sysdig或bpftrace。
这些工具各有特色,可以根据你的需求选择合适的工具!
最后编辑:严锋 更新时间:2025-11-04 14:01