# 进程测试

# time

time <command>    # 执行一条命令,并统计其占用的 CPU 时长
  • 例:
    [root@CentOS ~]# time sleep 1
    
    real    0m1.001s
    user    0m0.001s
    sys     0m0.000s
    
    • real time :该命令实际的运行时长。
    • user time :该命令占用的用户态 CPU 时长。
    • sys time :该命令占用的内核态 CPU 时长。
    • user time 、sys time 是 CPU 多核的累计值,因此可认为该命令的 占用 CPU 核数 = ( user + sys ) / real

# timeout

timeout <duration> <command>    # 以子进程的形式执行一条命令,并限制其运行时长,超时之后则终止命令
      -s <signal>               # --signal ,超时时发送的信号,默认为 SIGTERM
      -k <duration>             # --kill-after ,发送 signal 信号之后,最多等待 duration 时长,如果进程依然运行,则发送 SIGKILL 信号
      --preserve-status         # 如果超时,timeout 命令的退出码默认为 124 。启用该参数,则会让退出码与目标命令一致
  • duration 是浮点数,单位可以是 s、m、h、d ,默认为 s 即秒。
    • 如果设置为 0 ,则不限制。
  • 如果目标命令在 duration 之前结束,则 timeout 命令的退出码与该命令一致。
  • 例:
    timeout 3.5s ping localhost
    

# strace

strace <command>          # 执行一条命令并跟踪它
       -c                 # 统计每种系统调用的次数、用时
       -e read,write,open # 只显示某些系统调用的信息
       -e trace=file      # 只显示某类系统调用的信息
       -tt                # 在每行的开头显示时间
       -T                 # 在每行的末尾显示这次系统调用的耗时,比如<0.000007>

strace -p <pid>           # 跟踪一个进程
  • 例:
    [root@CentOS ~]# strace -e trace=file echo hello
    execve("/usr/bin/echo", ["echo", "hello"], [/* 22 vars */]) = 0
    access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
    hello
    +++ exited with 0 +++
    

# watch

watch <command>   # 周期性地执行一条命令,显示其 stdout 和 stderr
      -d          # 如果输出与上一次执行不同,则将差异部分高亮显示
      -e          # 如果命令的返回码不为 0 ,则停止执行
      -n 2        # 每隔几秒执行一次(默认是 2 秒)
      -t          # 不显示 watch 窗口的标题
  • 例:
    watch -d -n 1 ping localhost