携手创作,共同生长!这是我参加「日新计划 8 月更文应战」的第8天,点击检查活动详情

学点Linux命令没坏处(进程管理)

前语

操作体系中每个软件的运转都是相当于敞开了一个或多个进程,在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

参考文档

  • 个人觉得很不错的书本:微信读书跟老男孩学Linux运维