使用 Windows 时,经常会出现莫名其妙程序卡死无响应的状态,这个时候我们都需要调出任务管理器来强制终止进程,这其实就是 Windows 下的一个进程管理办法。相对的 Linux 下也有进程管理,面对服务器黑压压的命令行界面,我们没法像 Windows 一样调出一个 UI 界面来管理进程,所以熟练掌握 Linux 下的进程管理命令是非常重要的。
一、显示当前系统进程 1. 使用 ps 命令即可打印出相关进程信息,相关命令内容和参数如下:
1 2 3 4 PID :进程识别号 TTY :终端机号 TIME:此进程消耗的 CPU 时间 CMD :正在执行的命令或者进程名
1 2 3 4 -a : 显示当前终端的所有进程信息 -u : 以用户的格式显示进程信息 -x : 显示后台进程运行的参数
其中第一行每一列的详细信息分别如下:
1 2 3 4 5 6 7 8 9 10 11 12 USER : 用户名 PID : 进程号 %CPU : 进程占用 CPU 百分比 %MEM : 进程占用物理内存百分比 VSZ : 进程占用虚拟内存大小(KB) RSS : 进程占用的物理内存大小(KB) TTY : 终端名称 STAT : 进程状态(S-睡眠,s-表示该进程是回话先导进程,R-正在运行,D-等待运行, N-表示进程有比普通进程优先级更低的优先级,Z-僵死进程,T-被跟踪or被终止等待) START: 进程启动时间 TIME : 进程使用 CPU 的时间 COMMAND : 启动进程时所用的命令和参数,过长会被截断显示
1 2 3 4 5 6 7 8 9 10 11 12 ps -ef -e: 显示所有进程 -f : 全格式显示 UID :用户名 PID :进程号 PPID :父进程号 C : CPU 用于计算执行优先级的因子。数值越大,表明进程是 CPU 密集型运算, 执行优先级会降低;数值越小,表明进程是 I/O 密集型运算,执行优先级会提高。 STIME :进程启动的时间 TTY : 终端名称 TIME : CPU时间 CMD : 启动进程时所用的命令和参数
二、终止进程 1. kill 和 killall 命令可以用来杀死进程,命令详细内容如下: 1 2 3 4 5 6 kill PID kill -9 PID killall 进程名
三、进程树 pstree 命令可以调出进程树,以便更直观的看到进程信息,命令详情如下:
1 2 3 4 pstree -p :显示进程 ID -u :显示进程所属用户
四、服务管理 服务的本质其实就是后台运行的进程,一般都会监听某个端口,等待其他程序发送过来的请求,例如:MySQL 、Web服务 、Ngnix 、防火墙等,这些其实都是运行在计算机后台的程序,也称守护进程 。
1 2 3 4 5 6 7 8 9 10 service mysql.server start service mysql.server stop service mysql.server restart service mysql.server status service mysql.server reload
注:CentOS 7 之后,不再使用 service,而是 systemctl
2. 查看服务名 进程服务文件都存在了 /etc/init.d 目录下,使用如下命令即可看到所有的服务名:五、运行级别 1. CentOS 6 有 7 个运行级别,详细如下(3、5 级别是常见的): 1 2 3 4 5 6 7 0 : 系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动 1 : 单用户工作状态,root 权限,用于系统维护,禁止远程登陆 2 : 多用户状态(没有 NFS),不支持网络 3 : 完全的多用户状态(有 NFS),登陆后进入控制台命令行模式 4 : 系统未使用,保留 5 : X11 控制台,登陆后进入图形 GUI 模式 6 : 系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动
Linux 开机全过程:开机 > BIOS > /boot > init 进程 > 运行级别 > 运行级别对应的服务
2. chkconfig 指令 chkconfig 命令可以给每个服务在不通运行级别下设置自启动或者关闭,指令详细内容如下:1 2 3 4 5 chkconfig --list chkconfig --list |grep ssrmu chkconfig ssrmu --list
修改服务自启动状态,可以使用如下命令:
1 2 3 4 chkconfig sevicrName on/off chkconfig --level int serviceName on/off
六、查看 OS 版本 不同的 OS 发行版可能会有略微的差别,配置文件位置以及命令可能有所区别,这里提供查询 OS 版本的命令。
1 2 3 4 cat /etc/issuecat /proc/versionuname -a uname -s
七、动态监控进程 1. 使用 top 命令便可以动态的监控进程状态,top 和 ps 最大的区别就在于此,top 每隔一段时间会刷新正在运行的进程,并且可以做相关操作,命令参数详细如下: 1 2 3 -d int : 指定 top 命令 -i : 使 top 不显示任何闲置或者僵死进程 -p : 指定 PID 来监视某个进程的状态
1 2 3 4 5 P 以 CPU 使用率排序(默认) M 以内存使用率排序 N 以 PID 排序 q 退出top K 按 k 键可以输入 PID 杀死进程
八、查看系统网络情况 1. 使用 netstat 可以查看当前的网络情况,命令详情如下: 1 2 3 4 5 6 netstat -anp -an :按一定顺序排列输出 -p :显示哪个进程在调用 -t :和 tcp 有关 -d : 和 udp 有关
2. 使用 netstat -anp |grep electron-ssr 组合命令可以查看某个进程的网路情况,结果去下图:
九、后台运行进程 & 在命令的最后面加入这个符号,此命令便会在后台执行ctrl + z 将一个终端执行的命令挂起放到后台,此时这个命令(程序)是处于暂停状态的,不可以执行。jobs 查看当前有多少后台执行的命令,jobs -l 可以显示命令的 PID 。fg 将后台中的命令调至前台继续运行,假若有多个后台运行的命令,可以使用 fg int 来将相应的命令调出到终端,int 值是使用 jobs 命令时的序号(非 PID)。bg 将一个在后台暂停的命令,变成继续执行(在后台执行),假若有多个后台运行的命令,可以使用 bg int 来将相应命令放到后台执行,int 值是使用 jobs 命令时的序号(非 PID)。注:先 ctrl + z 将命令挂起到后台,再使用 bg 就可以让其继续在后台执行,使用 fg 又可以在终端执行。
ctrl + c 命令执行中途,可以中断命令的执行。ctrl + \ 退出命令ctrl + d 退出终端,作用相当于在终端中输入 exit 后回车ctrl + s 中断控制台输出ctrl + q 恢复控制台输出ctrl + l 清屏,相当于 clear