使用 ps 观察程序

ps -l

ps程序可以查询当前在运行的进程信息。ps -l可以列出详细的信息,默认仅列出当前 bash 相关的进程。

sudo -i
ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 2133 2113 0 80 0 - 3026 do_sys pts/0 00:00:00 sudo
4 S 0 2134 2133 0 80 0 - 2651 do_wai pts/0 00:00:00 bash
4 R 0 2146 2134 0 80 0 - 2854 - pts/0 00:00:00 ps

F代表程序旗标,表明程序的一些性质,图中 4 代表是 root 执行。

S代表该程序的运行状态。

字母 状态
R Running 运行中
S Sleep 休眠中,随意可以唤醒
D Disk Sleep 深入休眠,通常正在进行磁盘IO,不可唤醒
T Stopped 暂停状态
Z Zombie 进程已结束,但父进程没有回收

UID 是进程执行者的 UID, PID 就是进程的 ID,PPID 就是父进程的 PID。

PRI 和 NI 代表程序的执行优先级,越小则越优先执行。

C 代表程序的CPU占用率。ADDR 和 SZ 和内存相关,代表内存中的位置和占内存大小。WCHAN 表示 waiting channel 表明程序的等待运行进度。TIME代表该程序占用CPU运行的时间。

TTY 表示所在的终端,本地终端是TTY,其他则是动态的虚拟终端 pts。CMD 代表是哪个程序指令。

ps aux

ps aux或者ps -aux可以查看当前所有进程(两种不同的参数风格)。

ps aux | head -n 4
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 102724 11524 ? Ss 01:51 0:01 /sbin/init auto noprompt
root 2 0.0 0.0 0 0 ? S 01:51 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 01:51 0:00 [rcu_gp]

这和ps -l的信息基本是一样,RSS表示使用的物理内存大小,VSZ表示使用的虚拟内存大小,TTY为 ? 表示该进程并不在任何终端下运行。Start 表明该程序开始运行的时间。

top

top 可以动态查看几秒钟内各进程的信息,不过他可以按照内存使用,CPU占用等排序,可以更直观的查看资源使用信息。

pstree

pstree可以把当前进程的父子调用关系绘制成一个树形图,便于查看他们的关系。

向程序发送信号

在 linux 中,与程序交互的重要手段之一就是向程序发送信号。kill 可以用于发送信号,kill -l可以查询信号的种类

kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

使用 kill -signalnumber PID 可以向对应 PID 的程序发送信号。

kill -9 1000 # -9即 kill 信号,强制要求程序退出,这是最常用的
kill -15 %2 # %开头表示背景工作号,-15表示要求正常结束

程序的优先级

每个进程都有一个PRI数值(priority)和 NI 数值(nice),这两个数字加起来就是程序的优先级,越低越优先。

为什么要设置两个数值呢?因为 PRI 是内核算出来的,不可更改的数,NI 则是用户可以手动调整的。通过调整 NI,就可以一定程度上自订程序的优先级。

# nice 命令
nice -n 10 command # 赋值 ni=10 的命令 renice 10 PID # 修改已有进程的 ni 值

root 可以修改所有进程的 NI 值,范围(-20 ~ 19),而一般用户只能调整自己进程的值,范围(0~19)。

查询程序打开的文件

fuser 查询一个文件或目录的使用者。

~$ fuser -v . # -v 查看详细信息
USER PID ACCESS COMMAND
/home/ubuntu: ubuntu 225862 ..c.. bash

相对的,lsof 查询程序已经打开的文件

lsof [-adu] # 列出程序打开的文件
+d: 限定目录
-u: 限定文件
-a: 需要多个条件同时满足 lsof -u ubuntu
# 太多了!而且不能指定pid,所以只能用grep选中要查看的程序了
lsof -a -u ubuntu +d .

pidof 可以快速根据命令名查找pid,默认会找出所有的pid

pidof bash
225862

最新文章

  1. [ Arch Linux ] Arch更新源高速源整理之测速并自动排序高速源 加快更新效率
  2. php远程连接http方式
  3. MongoDB复制机制实例
  4. 注册表-恶意首页追踪之旅(IE不能改主页)
  5. Puppet的执行过程
  6. spring 事务 笔记3.1
  7. Log4net 日志
  8. POJ1664(整数划分)
  9. cornerstone 使用报错 working copy ... is too old(format 10 created by subversion 1.6)
  10. bzoj 1189 紧急疏散 网络流
  11. [认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)
  12. ubuntu14.04 安装lnmp + redis
  13. php使用redis的GEO地理信息类型
  14. [博客迁移]探索Windows Azure 监控和自动伸缩系列1 - 连接中国区Azure
  15. vue-router-1-安装与基本使用
  16. 网络编程学习笔记一:Socket编程
  17. C++ template —— 函数对象和回调(十四)
  18. codevs 1380 没有上司的舞会 - 树形动态规划
  19. 认识网页:html + css + JavaScript
  20. scala程序运行的几种方式

热门文章

  1. kubernetes数据持久化PV-PVC详解(一)
  2. kubernetes CKA题库(附答案)
  3. mysql基础问题三问(底层逻辑;正在执行;日志观察)
  4. org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = character varying
  5. 快速入门JavaScript编程语言
  6. Golang Gorm 封装 分页查询 Where Order 查询
  7. 强化学习调参技巧二:DDPG、TD3、SAC算法为例:
  8. 微服务系列之服务监控 Prometheus与Grafana
  9. 比Sqoop功能更加强大开源数据同步工具DataX实战
  10. 【架构设计】保持简单轻量设计的三个原则——DRY,KISS, YAGNI