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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 操作系统中每个软件的运行都是相当于开启了一个或多个进程,在window中的任务管理器可以清晰的看到我们正在运行的那些进程并且可以通过鼠标操作结束或调整进程,而在linux我们需要使用命令来进行这一系列操作。本文主要介绍下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



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
|
3天前
|
消息中间件 算法 Linux
【Linux】详解如何利用共享内存实现进程间通信
【Linux】详解如何利用共享内存实现进程间通信
|
3天前
|
Linux
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
【Linux】命名管道的创建方法&&基于命名管道的两个进程通信的实现
|
3天前
|
Linux
【Linux】匿名管道实现简单进程池
【Linux】匿名管道实现简单进程池
|
2天前
|
Linux 数据库
linux守护进程介绍 | Linux的热拔插UDEV机制
linux守护进程介绍 | Linux的热拔插UDEV机制
linux守护进程介绍 | Linux的热拔插UDEV机制
|
2天前
|
Unix Linux 调度
linux线程与进程的区别及线程的优势
linux线程与进程的区别及线程的优势
|
2天前
|
Linux 调度 C语言
|
2天前
|
监控 Linux 数据处理
|
2天前
|
编解码 Ubuntu Linux