进程

最后更新于:2022-04-01 22:43:15

## 进程列表 PID是每个进程唯一号码。使用 `ps` 获取所有正在运行的进程列表。 ~~~ # ps -auxefw                          # 所有正在运行进程的详尽列表 ~~~ 然而,更典型的用法是使用管道或者 `pgrep`: ~~~ # ps axww | grep cron   586  ??  Is     0:01.48 /usr/sbin/cron -s # ps aux | grep 'ss[h]'               # Find all ssh pids without the grep pid # pgrep -l sshd                       # 查找所有进程名中有sshd的进程ID # echo $$                             # The PID of your shell # fuser -va 22/tcp                    # 列出使用端口22的进程 # fuser -va /home                     # 列出访问 /home 分区的进程 # strace df                           # 跟踪系统调用和信号 # truss df                            # 同上(FreeBSD/Solaris/类Unix) # history | tail -50                  # 显示最后50个使用过的命令 ~~~ ## 优先级 用 `renice` 更改正在运行进程的优先级。负值是更高的优先级,最小为-20,其正值与 "nice" 值的意义相同。 # renice -5 586                       # 更强的优先级586: old priority 0, new priority -5 使用 `nice` 命令启动一个已定义优先级的进程。 正值为低优先级,负值为高优先级。确定你知道 `/usr/bin/nice` 或者使用 shell 内置命令(`# which nice`)。 ~~~ # nice -n -5 top                      # 更高优先级(/usr/bin/nice) # nice -n 5 top                       # 更低优先级(/usr/bin/nice) # nice +5 top                         # tcsh 内置 nice 命令(同上) ~~~ nice 可以影响 CPU 的调度,另一个实用命令 `ionice` 可以调度磁盘 IO。This is very useful for intensive IO application which can bring a machine to its knees while still in a lower priority. 此命令仅可在 Linux (AFAIK) 上使用。你可以选择一个类型(idle - best effort - real time),它的 man 页很短并有很好的解释。 ~~~ # ionice c3 -p123                     # 给 pid 123 设置为 idle 类型 # ionice -c2 -n0 firefox              # 用 best effort 类型运行 firefox 并且设为高优先级 # ionice -c3 -p$$                     # 将当前的进程(shell)的磁盘 IO 调度设置为 idle 类型 ~~~ 例中最后一条命令对于编译(或调试)一个大型项目会非常有用。每一个运行于此 shell 的命令都会有一个较低的优先级,但并不妨碍这个系统。$$ 是你 shell 的 pid (试试 echo $$)。 ## 前台/后台 当一个进程在 shell 中已运行,可以使用 `[Ctrl]-[Z] (^Z)`, `bg` 和 `fg` 来 调入调出前后台。举个例子:启动 2 个进程,调入后台。使用 `jobs` 列出后台列表,然后再调入一个进程到前台。 # ping cb.vu > ping.log ^Z                                    # ping 使用 [Ctrl]-[Z] 来暂停(停止)  # bg                                  # 调入后台继续运行# jobs -l                             # 后台进程列表[1]  - 36232 Running                       ping cb.vu > ping.log [2]  + 36233 Suspended (tty output)        top # fg %2                               # 让进程 2 返回到前台运行 使用 `nohup` 开启一个持续运行的进程直到 shell 被关闭(避免挂断)。 # nohup ping -i 60 > ping.log & ## Top `top` 程序用来实时显示系统中各个进程的运行信息。 # top 当 `top` 在运行的时候,按下 `h` 键会显示帮助画面。常用键如下: - **u [用户名]** 只显示属于此用户的进程。使用 + 或者空白可以查看所有用户 - **k [PID]** 结束 PID 进程 - **1** 显示所有进程状态信息(只有Linux) - **R** 将当前排序倒转 ## Kill命令与信号 使用 `kill` 或 `killall` 终止或发送一个信号给进程。 ~~~ # ping -i 60 cb.vu > ping.log & [1] 4712 # kill -s TERM 4712                   # 同 kill -15 4712 # killall -1 httpd                    # 发送 HUP 信号终止进程 httpd # pkill -9 http                       # 发送 TERM 信号终止包含 http 的进程 # pkill -TERM -u www                  # 发送 TERM 信号终止 www 所有者进程# fuser -k -TERM -m /home             # 终止所有访问 /home 的进程(卸载该分区前) ~~~ 下面是一些重要的信号: - 1       `HUP` (挂起) - 2       `INT` (中断) - 3       `QUIT` (退出) - 9       `KILL` (KILL 信号不能被捕捉,不能被忽略。) - 15     `TERM` (软件终止信号)
';