目录
四、系统管理
1、启动进程
2、监听进程运行状态#
命令演示
查看特定进程结果图
3、查看进程树
命令演示
选项
4、终止进程#
命令演示
信号
5、放入后台命令 &和Ctrl+Z详解
6、后台命令脱离终端运行#
四、系统管理
1、启动进程
# 1、前台启动进程(最常用)
# 启动一个耗时的进程
# 控制台演示
[root@ZIBO ~]# find / -name demo.jpg # 从根本目录查找文件,非常耗时
^Z # Ctrl + Z 挂起进程。将进程挂起,指的是将前台运行的进程放到后台,并且暂停其运行
[1]+ Stopped find / -name demo.jpg
[root@ZIBO ~]# ps
PID TTY TIME CMD
29793 pts/0 00:00:00 bash
29818 pts/0 00:00:00 find # 我们刚才执行的find进程,进程号是29818
29819 pts/0 00:00:00 ps
# 2、后台启动进程(用的相对较少,除非非常耗时,且不着急需要其运行结果)
# 后台启动方法:在命令结尾添加一个“&”符号(前面要加空格)
# 控制台演示
[root@ZIBO ~]# find / -name demo.jpg & # 后台启动进程
[2] 29835 # 控制台会打印一个进程号
[root@ZIBO ~]# ps
PID TTY TIME CMD
29793 pts/0 00:00:00 bash
29818 pts/0 00:00:00 find
29835 pts/0 00:00:00 find # 后台启动的进程
29836 pts/0 00:00:00 ps
2、监听进程运行状态#
命令演示
# 1、top 命令
# top 命令可以动态地持续监听进程地运行状态
# top 命令还提供了交互界面
# 格式
top [选项]
# 选项
-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
-n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
-p 进程PID:仅查看指定 ID 的进程;
-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
-u 用户名:只监听某个用户的进程;
# 在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作
? 或 h:显示交互模式的帮助;
P:按照 CPU 的使用率排序,默认就是此选项;
M:按照内存的使用率排序;
N:按照 PID 排序;
T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
r:按照 PID 给某个进程重设优先级(Nice)值;
q:退出 top 命令;
# 控制台演示
# 系统当前时间、系统运行时间、当前登录的用户数量、系统在1、5、15分钟前的负载(不超过CPU核数)
top - 10:05:39 up 4 days, 15 min, 1 user, load average: 0.00, 0.01, 0.00
# 系统中的进程总数、正在运行的进程、说面的进程、停止的进程、僵尸进程(如果不是 0,则需要手工检查僵尸进程)
Tasks: 110 total, 2 running, 107 sleeping, 1 stopped, 0 zombie
# 用户模式占用的 CPU 百分比、系统模式占用的 CPU 百分比、系统模式占用的 CPU 百分比
# 空闲 CPU 占用的 CPU 百分比、等待输入/输出的进程占用的 CPU 百分比、硬中断请求服务占用的 CPU 百分比
# 硬中断请求服务占用的 CPU 百分比、st(steal time)意为虚拟时间百分比,
# 就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
%Cpu(s): 14.3 us, 0.0 sy, 0.0 ni, 85.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# 物理内存的总量,单位为KB、己经使用的物理内存数量、空闲的物理内存数量、作为缓冲的内存数量
MiB Mem : 1818.9 total, 80.4 free, 1399.5 used, 338.9 buff/cache
# 交换分区(虚拟内存)的总大小、已经使用的交换分区的大小、已经使用的交换分区的大小、作为缓存的交换分区的大小
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 234.4 avail Mem
# PID:进程的 ID。
# USER:该进程所属的用户。
# PR:优先级,数值越小优先级越高。
# NI:优先级,数值越小、优先级越高。
# VIRT:该进程使用的虚拟内存的大小,单位为 KB。
# RES:该进程使用的物理内存的大小,单位为 KB。
# SHR:共享内存大小,单位为 KB。
# S:进程状态。
# %CPU:该进程占用 CPU 的百分比。
# %MEM:该进程占用内存的百分比。
# TIME+:该进程共占用的 CPU 时间。
# COMMAND:进程的命令名
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 177364 7232 4232 S 0.0 0.4 0:06.80 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd
……
# 下面是一些实战操作,更多参考http://c.biancheng.net/view/1065.html
# 2、只查看特定的进程
top -p 进程号
# 命令
top -p 29818
# 控制台演示[见-查看特定进程结果图]
# 3、帮助、退出、杀死进程
# q:退出top命令;
# ?或h:查看帮助
# k:杀死进程,会提示输入要杀死进程的PID
# 接下来 top 命令提示我们输入信号,信号 9 代表强制中止,这时就能够强制中止该进程了
# 4、其他常用
# "ps aux" 可以查看系统中所有的进程;
# "ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
# "ps -l" 只能看到当前 Shell 产生的进程;
查看特定进程结果图
3、查看进程树
命令演示
# 命令格式[见-选项]
pstree [选项] [PID或用户名]
# pstree
# 控制台演示
[root@ZIBO ~]# pstree
systemd─┬─AliYunDun───22*[{AliYunDun}]
├─AliYunDunUpdate───5*[{AliYunDunUpdate}]
├─CmsGoAgent.linu─┬─exe───8*[{exe}]
│ └─5*[{CmsGoAgent.linu}]
├─NetworkManager───2*[{NetworkManager}]
├─2*[agetty]
├─aliyun-service───6*[{aliyun-service}]
├─assist_daemon───7*[{assist_daemon}]
├─atd
├─auditd─┬─sedispatch
│ └─2*[{auditd}]
├─chronyd
├─containerd───8*[{containerd}]
├─containerd-shim─┬─tini───java───39*[{java}]
│ └─12*[{containerd-shim}]
├─containerd-shim─┬─tini───java───46*[{java}]
│ └─12*[{containerd-shim}]
├─crond
├─dbus-daemon
├─dockerd─┬─8*[docker-proxy───4*[{docker-proxy}]]
│ └─10*[{dockerd}]
├─lsmd
├─mcelog
├─nginx───nginx
├─polkitd───5*[{polkitd}]
├─rngd───{rngd}
├─rsyslogd───2*[{rsyslogd}]
├─smartd
├─sshd───sshd───sshd───bash───pstree
├─sssd─┬─sssd_be
│ └─sssd_nss
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-udevd
└─tuned───3*[{tuned}]
选项
选项 | 含义 |
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。 |
-c | 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。 |
-n | 根据进程 PID 号来排序输出,默认是以程序名排序输出的。 |
-p | 显示进程的 PID。 |
-u | 显示进程对应的用户名称。 |
4、终止进程#
命令演示
# 格式
kill [信号] PID
# 常用杀死进程,直接kill -9 pid
# 控制台演示
[root@ZIBO ~]# find / -name demo.jpg
^Z
[1]+ Stopped find / -name demo.jpg
[root@ZIBO ~]# ps
PID TTY TIME CMD
29793 pts/0 00:00:00 bash
29923 pts/0 00:00:00 find
29924 pts/0 00:00:00 ps
[root@ZIBO ~]# kill -9 29923 # 杀死进程
[root@ZIBO ~]# ps
PID TTY TIME CMD
29793 pts/0 00:00:00 bash
29925 pts/0 00:00:00 ps
[1]+ Killed find / -name demo.jpg ¥# 被杀死
信号
信号编号 | 信号名 | 含义 |
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。 |
3 | QUIT | 退出。 |
9 | KILL | 杀死进程,即强制结束进程。 |
11 | SEGV | 段错误。 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号。 |
5、放入后台命令 &和Ctrl+Z详解
# & 在后台处于【执行】状态,继续执行,执行完之后会有提示,有输出会输出
# 放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的
# 命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于【暂停】状态
6、后台命令脱离终端运行#
# 上面的放入后台命令 &和Ctrl+Z命令,只是当前登陆终端的后台,而不是远程服务器的后台,在程序运行结束之前退出登录,这个后台命令就不会继续执行了!
# 我们需要在远程终端执行某些后台命令,有以下3种方法:
# 1、把需要在后台执行的命令加入 /etc/rc.local 文件,让系统在启动时执行这个后台程序。这种方法的问题是,服务器是不能随便重启的,如果有临时后台任务,就不能执行了。
# 2、使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。
# 3、使用 nohup 命令
# nohup 命令
# nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确地在后台执行
# 格式
nohup [命令] &
# 注意,这里的‘&’表示此命令会在终端后台工作;反之,如果没有‘&’,则表示此命令会在终端前台工作。
# 运行jar程序常用!