在 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

示例:

  • 查看某个命令的进程资源占用:
    1. 运行 top
    2. c 显示完整的命令名称。
    3. k 并输入进程 PID,可以终止进程。

常用操作:

  • P:按 CPU 使用率排序。
  • M:按内存使用率排序。
  • q:退出 top

3. htop 命令

htoptop 的增强版,提供了更友好的交互界面和更多功能。

语法:

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
  • 如果你需要监测系统资源和进程,使用 tophtop
  • 如果你需要跟踪命令的系统调用,使用 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
  • 如果你需要高级系统监控,使用 sysdigbpftrace

这些工具各有特色,可以根据你的需求选择合适的工具!

作者:严锋  创建时间:2025-03-16 18:19
最后编辑:严锋  更新时间:2025-05-09 15:48