网络异常,图片无法展示
|
前言
操作系统中每个软件的运行都是相当于开启了一个或多个进程,在window中的任务管理器可以清晰的看到我们正在运行的那些进程并且可以通过鼠标操作结束或调整进程,而在linux我们需要使用命令来进行这一系列操作。本文主要介绍下Linux常用的进程管理命令,主要从启动进程=》查看进程=》修改进程=》结束进程这几个方面来处理。
启动进程
- nohup:nohup(no hang up不挂起)命令可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端。常用来在后台执行某些脚本,主要命令如下:
- nohup + file + &,运行命令会返回pid
- nohup + file + > 日志文件 + &, 重定向输入到日志
[root@zz shell]# nohup demo.sh & [2] 25286 [root@zz shell]# cat nohup.out > demo.log & [1] 25541
- init:init命令是Linux下的进程初始化工具,init进程是所有Linux进程的父进程,它的进程号为1。init命令的主要任务是依据配置文件“/etc/inittab”创建Linux进程。
注:这个命令用的比较少大概了解一下
[root@VM-12-5-centos ~]# init 6 #可以执行重启操作
查看进程
- ps: ps是我们查看进程最为常用的命令之一,他能查看输入命令那一刻系统进程的情况,缺点就是不能实时的监控进程的变化(top命令),但在大多数场景中我们都是不需要实现查看的因为正常的进程变化不会太多。
- ps常用的命令组合:
- ps -aux | grep *** (aux可以查看出所有终端的进程,grep加上关键子就可以过滤出我们想要查看的进程情况)
- ps -ef(ef比aux范围更广)
[root@VM-12-5-centos ~]# ps aux | grep nginx USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 14479 0.0 0.0 115928 1020 pts/0 R+ 13:41 0:00 grep --color=auto nginx [root@VM-12-5-centos ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:14 ? 00:00:01 /usr/lib/systemd ***
- pstree: pstree命令更能形象的展示进程之间的关系,以树形结构显示进程和进程之间的关系。
[root@VM-12-5-centos ~]# pstree systemd─┬─acpid ├─2*[agetty] ├─atd ├─auditd───{auditd} ****
- pgrep: 直接输出匹配进程号,结合kill使用
[root@zz ~]# pgrep mongod 2049 [root@zz ~]# pgrep -u root 1 2 ***
- top:top命令用来实时展示当前命令执行情况,这个命令是我门显示调试和处理bug时候常用的命令之一,一下几个功能是方便我们解决问题的利器:
- 支持排序,该命令可以按照CPU的使用、内存的使用和执行时间对系统任务进程进行排序显示,
- 能够实时地显示系统中各个进程的资源占用状况
- 支持可以通过交互式命令进行设定显示
- 命令中常用的查看
- 交互式输入大写P,按CPU排序
- 交互式键入大写M,按内存使用lv排序
- top + -bc -d 5,每个五秒以批处理模式展示具备文件路径的任务进程.b(批处理模式)c(显示文件路径)d(设置刷新时间)
[root@zz ~]# top # 输入top进如交互式命令 ** [root@zz ~]# top -bc -d 10 ** worker process 21909 root 20 0 241412 4648 3488 S 0.0 0.1 0:00.02 sudo nohup ./npc -server=121.4.59.78:8024 -vkey=8hqkqa45c1bhuf7v -type=tcp 22967 root 20 0 0 0 0 S 0.0 0.0 0:00.30 [kworker/u4:0] 23569 mysql 20 0 1604584 213788 10216 S 0.0 5.5 43:21.19 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid ***
- strace: 会追踪程序运行时的整个生命周期,输出每一个系统调用的名字、参数、返回值和执行所消耗的时间等,是排查问题的杀手锏。常用命令:
- strace -tt -f + file path
注:strace命令很适合处理程序僵尸、命令执行报错等问题,当我们的日志看不出问题出现的原因时,使用strace可能有意想不到的收获。
[root@VM-12-5-centos ~]# strace -tt -f nginx # 分析整个nginx执行过程 15:09:11.166570 execve("/usr/sbin/nginx", ["nginx"], 0x7ffc75e034f0 /* 23 vars */) = 0 15:09:11.166850 brk(NULL) = 0x564571b7b000 15:09:11.166911 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f755dfbc000 15:09:11.166949 access("/etc/ld.so.preload", R_OK) = 0 15:09:11.166977 open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3 ***
- ltrace:能够跟踪进程的库函数调用,它会显现出调用了哪个库函数,而strace则是跟踪进程的每个系统调用。
[root@VM-12-5-centos ~]# ltrace nginx # 输出的看不懂,应该高高手才会用吧,看来要学习下c了 ****
- 补充一个命令runlevel:用来查看系统运行级别,系统级别一般为:0(停机),1(单用户模式),2(无网络多用户),3(多用户),4(未使用),5(图形),6(重启)
[root@zz ~]# runlevel N 3
注:不太了解这是啥意思,先记录下
调整进程优先级
这个目前在日常工作中未使用过此命令,在此做一了解。
- nice:Linux的优先级范围是从-20(最大优先级)到19(最小优先级)。优先级越高的程序占用CPU的次数越多,反之亦然。(为运行程序的)
- rnice:同nice只是用来调整运行中程序优先级的
注:进程优先级的查看有兴趣可以去查查资料
结束进程
- kill:kill命令能够终止你希望停止的进程。 常用的方式如下:
- kill + pid (终止进程)
- kill + -9 + pid (强制终止)
- kill + -0 + pid (验证进程是否存在)
[root@VM-12-5-centos ~]# pgrep nginx 22841 22842 [root@VM-12-5-centos ~]# kill 22841
- killall: 个人觉得这个在日常的shell脚本更为实用,因为我们会发现一个应用可能会启用多个进程,即会产生多个pid,如果用kill会很麻烦,直接用killall会方便多(前提是进程名一样)
- kill + 进程名
[root@VM-12-5-centos ~]# pgrep nginx 19476 19477 [root@VM-12-5-centos ~]# kill nginx -bash: kill: nginx: arguments must be process or job IDs [root@VM-12-5-centos ~]# killall nginx [root@VM-12-5-centos ~]# pgrep nginx
- pkill:pkill命令可通过进程名终止指定的进程,pkill作用和killall一样,他与killall有以下不同:
- pkill + 进程名(可以模糊匹配,killall不支持)
- 使用killall终止进程需要连续执行几次,而pkill可以杀死指定进程及其所有子进程。(注:这个是跟老男孩学Linux运维上看到的,但不晓得啥意思,有知道烦请评论区回复下)
[root@VM-12-5-centos ~]# pgrep nginx 23657 23658 [root@VM-12-5-centos ~]# killall ngin ngin: no process found [root@VM-12-5-centos ~]# pkill ngin [root@VM-12-5-centos ~]# killall nginx -v Killed nginx(23510) with signal 15 Killed nginx(23511) with signal 15