Skip to content

Commit

Permalink
feat: add ps.md cheatsheet. #251
Browse files Browse the repository at this point in the history
  • Loading branch information
jaywcjlove committed Jan 5, 2023
1 parent 6c220d8 commit 9ef65a9
Show file tree
Hide file tree
Showing 2 changed files with 249 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ Quick Reference
[Netcat](./docs/netcat.md)<!--rehype:style=background: rgb(4 92 135);-->
[Sed](./docs/sed.md)<!--rehype:style=background: rgb(16 185 129);-->
[OpenSSL](./docs/openssl.md)<!--rehype:style=background: rgb(114 20 18);-->
[ps](./docs/ps.md)<!--rehype:style=background: rgb(99 99 99);-->
[Systemd](./docs/systemd.md)<!--rehype:style=background: rgb(16 185 129);-->
[SSH](./docs/ssh.md)<!--rehype:style=background: rgb(99 99 99);-->
[Screen](./docs/screen.md)<!--rehype:style=background: rgb(99 99 99);-->
Expand Down
248 changes: 248 additions & 0 deletions docs/ps.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,248 @@
ps 备忘清单
===

Linux 为我们提供了一个名为 `ps` 的实用程序,用于查看与系统上的进程相关的信息,它是 `Process Status` 的缩写
这份 `ps` 命令备忘清单的快速参考列表,包含常用选项和示例。

入门
---

### 语法
<!--rehype:wrap-class=row-span-4-->

```bash
$ ps [options]
```

命令运行示例,列出当前 shell 中的所有进程:

```bash
$ ps

PID TTY TIME CMD
12330 pts/0 00:00:00 bash
21621 pts/0 00:00:00 ps
```

---

:-- | --
:-- | --
`PID` | 唯一的进程 ID
`TTY` | 用户登录的终端类型
`TIME` | 进程运行的 CPU 数量,以分钟和秒为单位
`CMD` | 启动进程的命令的名称

注意:有时当我们执行 `ps` 命令时,它显示 `TIME``00:00:00`

---

ps 命令支持 3 种使用语法风格

- `Unix` 可以分组并以连字符开头
- `BSD` 可以分组但前面没有连字符
- `GNU` 长选项,前面有双连字符

### 示例
<!--rehype:wrap-class=row-span-3-->

Option | Function
:-- | --
`ps -ef / -aux` | 以完整格式列出当前正在运行的进程
`ps -ax` | 列出当前正在运行的进程
`ps -u <username>` | 列出特定用户的进程
`ps -C <command>` | 列出给定命令的进程
`ps -p <PID>` | 列出具有给定 PID 的进程
`ps -ppid <PPID>` | 列出具有给定 ppid 的进程
`pstree` | 在层次结构中显示过程
`ps -L` | 列出特定进程的所有线程
`ps --sort pmem` | 查找内存泄漏
`ps -eo` | 显示安全信息
`ps T` | 允许您仅选择与此终端关联的所有进程
`ps -U root -u root u` | 显示由 root 运行的进程
<!--rehype:className=code-nowrap-->

### 查看系统上的每个进程

要使用标准语法查看系统上的每个进程:

```bash
$ ps -e # 列出所有进程
$ ps -ef
$ ps -eF
$ ps -ely
```

要使用 BSD 语法查看系统上的每个进程:

```bash
$ ps ax # 以 BSD 格式列出所有进程
$ ps axu
```

### 打印进程树

```bash
$ ps -ejH
$ ps axjf
```

### 仅打印 PID 42 的名称

```bash
$ ps -q 42 -o comm=
```

### 获取有关线程的信息

```bash
$ ps -eLf
$ ps axms
```

### 列出当前用户拥有的所有进程

```bash
$ ps x
```

### 获取安全信息
<!--rehype:wrap-class=col-span-2-->

```bash
$ ps -eo euser,ruser,suser,fuser,f,comm,label
$ ps axZ
$ ps -eM
```

### 查看以 root 身份运行的每个进程

查看以 root 身份运行的每个进程(真实且有效的 ID)用户格式:

```bash
$ ps -U root -u root u
```

### 查看具有用户定义格式的每个进程
<!--rehype:wrap-class=col-span-2-->

```bash
$ ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
$ ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
$ ps -Ao pid,tt,user,fname,tmout,f,wchan
```

### 仅打印 syslogd 的进程 ID

```bash
$ ps -C syslogd -o pid=
```

### 显示面向用户的格式
<!--rehype:wrap-class=col-span-2 row-span-2-->

```bash
$ ps u

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
refs 11400 1.1 0.0 34853544 5816 s025 Ss Tue02PM 0:02.82 /bin/zsh --login
refs 34561 0.6 0.0 34822644 3152 s016 S+ 14Dec22 115:59.28 zsh (figterm)
refs 21377 0.5 0.0 34973972 7076 s028 S+ Wed09AM 4:32.19 zsh (figterm)
refs 78881 0.5 0.0 34843484 3256 s015 S+ 17Dec22 90:27.10 zsh (figterm)
```

### 列出具有完整格式的进程

```bash
$ ps f
$ ps -F
```

### 显示虚拟内存格式

```bash
$ ps v
```

### 按有效用户 ID 或名称显示进程

```bash
$ ps -u user[name or id]
# OR
$ ps --user user[name or id]
$ ps -u root
```

**真实**用户 ID 或名称显示进程

```bash
$ ps -U user[name or id]
# OR
$ ps --User user[name or id]
```

### 按实际组 ID 或名称显示进程

```bash
$ ps -G group[name or id]
# OR
$ ps --Group group[name or id]
```

### 隐藏 ps 命令输出的标题

```bash
$ ps h

PID TT STAT TIME COMMAND
33790 s000 S+ 104:10.45 zsh (figterm)
33800 s001 Ss+ 0:02.76 /bin/zsh --login
77830 s002 S+ 90:22.51 zsh (figterm)
77840 s003 Ss 0:00.66 /bin/zsh --login
```

### 显示命令后的环境

```bash
$ ps e

PID TTY STAT TIME COMMAND
886 tty2 Ssl+ 0:00 /usr/li....
```

### 重复 ps 命令输出的标题行

```bash
$ ps --headers -A
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
```

### 显示进程树

```bash
$ ps --forest -A
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
3 ? 00:00:00 \_ rcu_gp
4 ? 00:00:00 \_ rcu_par_gp
960 ? 00:00:00 \_ goa-identity-se
1118 ? 00:00:00 \_ at-spi-bus-laun
1124 ? 00:00:00 | \_ dbus-daemon
```

您可以使用 -H 选项打印进程层次结构

```bash
$ ps -H -A
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
3 ? 00:00:00 rcu_gp
1832 ? 00:00:37 gnome-terminal-
1840 pts/0 00:00:00 bash
1925 pts/1 00:00:00 bash
2867 pts/1 00:00:00 su
2868 pts/1 00:00:00 bash
```

0 comments on commit 9ef65a9

Please sign in to comment.