在 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_program
gdb
中使用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-05-09 15:48