【Linux】进程管理与服务管理

   日期:2020-05-30     浏览:147    评论:0    
核心提示:什么是进程在 Linux 系统当中:『触发任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设定。』从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!程序一般是放置在实体磁盘中,然后透过用户的执行来触发。触发后会加载到内存中成为一个个体,那就是进程。每个程序都有三组人马的权限,每组人马都具有 r/w/x 的权限。 为了操作系统可管理这个进程,因此进程有给予执运维

什么是进程

在 Linux 系统当中:『触发任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个 ID ,称为 PID,同时依据启发这个进程的用户与相关属性关系,给予这个 PID 一组有效的权限设定。』从此以后,这个 PID 能够在系统上面进行的动作,就与这个 PID 的权限有关了!

程序一般是放置在实体磁盘中,然后透过用户的执行来触发。触发后会加载到内存中成为一个个体,那就是进程。

每个程序都有三组人马的权限,每组人马都具有 r/w/x 的权限。 为了操作系统可管理这个进程,因此进程有给予执行者的权限/属性等参数,并包括程序所需要的脚本与数据或文件数据等, 最后再给予一个 PID 。系统就是透过这个 PID 来判断该 process 是否具有权限进行工作的!

子进程与父进程:

在进程执行的过程中可能会衍生出其他的进程,称之为子进程,子进程拥有一个指明其父进程PID的PPID。子进程可以继承父进程的环境变量和权限参数。

子进程的产生过程: fork & exec 一个进程生成子进程的过程是,系统首先复制(fork)一份父进程,生成一个暂存进程,这个暂存进程和父进程的区别是pid不一样,而且拥有一个ppid,这时候系统再去执行(exec)这个暂存进程,让他加载实际要运行的程序,最终成为一个子进程的存在。

当我们登入系统后,会取得一个 bash 的 shell ,然后,我们用这个 bash 提供的接口去执行另一个指令,例如 /usr/bin/passwd 或者是 touch 等等,那些另外执行的指令也会被触发成为 PID ,那个后来执行指令才产生的 PID 就是『子进程』了,而在我们原本的 bash 环境下,就称为『父进程』了。

有时候遇到这样的情况:明明我将有问题的进程关闭了,怎么过一阵子他又自动的产生? 而且新产生的那个进程的 PID 与原先的还不一样,这是怎么回事呢?』不要怀疑,如果不是 crontab 工作排程的影响,肯定有一支父进程存在,所以你杀掉子进程后, 父进程就会主动再生一支。找出那支父进程,然后将他删除就对啦!

常驻在内存的进程

常驻在内存当中的进程通常都是负责一些系统所提供的功能以服务用户各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。

Linux 的多人多任务环境

其实在 Linux 底下执行一个指令时,系统会将相关的权限、属性、程序代码与数据等均加载内存, 并给予这个单元一个进程标识符 (PID),最终该指令可以进行的任务则与这个 PID 的权限有关。这就是为什么 Linux 这么多用户,但是却每个人都可以拥有自己的环境原因,因为每个人登入后取得的 shell 的 PID 不同

进程管理

进程的观察

将某个时间点的进程运作情况显示出来。
指令:

ps

案例1:仅观察自己的 bash 相关进程:
ps -l

  • F:代表这个进程旗标 (process flags),说明这个进程的总结权限,常见号码有:

    • 若为 4 表示此进程的权限为 root ;
    • 若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。
  • S:代表这个进程的状态 (STAT),主要的状态有:

    • R (Running):该程序正在运作中;
    • S (Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒(signal)。
    • D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>打印)
    • T :停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态;
    • Z (Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。
  • C:代表 CPU 使用率,单位为百分比;

  • UID/PID/PPID:代表『此进程被该 UID 所拥有/进程的 PID 号码/此进程的父进程 PID 号码』

  • TTY:登入者的终端机位置,若为远程登录则使用动态终端接口 (pts/n);

  • TIME:使用掉的 CPU 时间,注意,是此进程实际花费 CPU 运作的时间,而不是系统时间;

  • CMD:就是 command 的缩写,造成此进程的触发程序之指令为何。

案例2:观察系统所有进程
ps -aux

  • USER:该 process 属于哪个使用者账号的?
  • PID :该 process 的进程标识符。
  • CPU:该 process 使用掉的 CPU 资源百分比;
  • %MEM:该 process 所占用的物理内存百分比;
  • SZ :该 process 使用掉的虚拟内存量
  • RSS :该 process 占用的固定的内存量
  • TTY:登入者的终端机位置,若为远程登录则使用动态终端接口 (pts/n);
  • START:该 process 被触发启动的时间;
  • TIME : 该 process 实际使用CPU 运作的时间。

案例3:查看目前某个进程:

ps –aux | grep xxx


案例4:以全格式显示当前所有的进程,查看进程的父进程。

ps -ef

**案例5:看 sshd 进程的父进程号是多少,应该怎样查询 **

pstree

pstree [-A|U] [-up]


案例1:列出目前系统上面所有的进树的相关性:

『僵尸 (zombie) 』进程,孤儿进程,守护进程。

通常,造成僵尸进程的成因是因为该进程应该已经执行完毕,或者是因故应该要终止了, 但是该进程的父进程却无法完整的将该进程结束掉,而造成那个进程一直存在内存当中。 如果你发现在某个进程的 CMD 后面还接上<defunct>时,就代表该进程是僵尸进程啦,例如:

当系统不稳定的时候就容易造成所谓的僵尸进程,可能是因为程序写的不好啦,或者是使用者操作习惯不良等等所造成。 如果你发现系统中很多僵尸进程时,记得啊!要找出该进程的父进程,然后好好的做个追踪,好好的进行主机的环境优化。

通常僵尸进程都已经无法控管,而直接是交给 systemd 这支程序来负责了,偏偏 system是系统第一支执行的程序, 他是所有程序的父程序!我们是无法杀掉该程序的。所以,如果产生僵尸进程, 而系统过一阵子还没有办法透过核心非经常性的特殊处理来将该进程删除时,那你只好透过 reboot 的方式来将该进程抹去了!

孤儿进程,一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

子进程死亡需要父进程来处理,那么意味着正常的进程应该是子进程先于父进程死亡。当父进程先于子进程死亡时,子进程死亡时没父进程处理,这个死亡的子进程就是孤儿进程。

但孤儿进程与僵尸进程不同的是,由于父进程已经死亡,系统会帮助父进程回收处理孤儿进程。所以孤儿进程实际上是不占用资源的,因为它终究是被系统回收了。不会像僵尸进程那样占用ID,损害运行系统。

守护进程:守护进程用于监控其他进程,当发现大量僵尸进程时,会找到他们的父节点并杀死,同时让init线程认养他们以便释放这些空间。
在linux系统中,守护进程和服务没有什么区别。
对于一个守护进程,有两个基本的要求:其一:必须作为init进程的子进程运行,其二:不与任何控制终端交互。

终止进程 kill 和 killall

kill

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用 kill 命令来完成此项任务。

通过进程号杀死进程

kill [代号] 进程号

常用代号

1 启动被终止的进程,可让该 PID 重新读取自己的配置文件,类似重新启动
9 代表强制中断一个进程的进行,如果该进程进行到一半, 那么尚未完成的部分可能会有『半产』产生
15 相当于用键盘输入 [ctrl]-z 来暂停一个进程的进行

案例1:踢掉某个非法登录用户

ps -aux | grep sshd //先找到进程号


案例 2: 终止远程登录服务 sshd

将2790的杀死即可终止:

 kill 9 2790

killall

由于 kill 后面必须要加上 PID (或者是 job number),所以,通常 kill 都会配合 ps, pstree 等指令,因为我们必须要找到相对应的那个进程的 ID 嘛!但是,如此一来,很麻烦~有没有可以利用『下达指令的名称』来给予讯号的?那就是killall。
killall通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用

killall [选项] 进程名称

选项与参数:
-i :nteractive 的意思,交互式的,若需要删除时,会出现提示字符给用户;
-I :指令名称(可能含参数)忽略大小写。

案例1:强制终止多个 gedit 编辑器

killall -9 gedit

案例2:依次询问每个bash 程序是否需要被终止运作

killall -i -9 bash

服务管理

服务(service) 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql , sshd 防火墙等),因此我们又称为守护进程,是 Linux 中非常重要的知识点。
简单的说,系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service 。 但是 service 的提供总是需要程序的运作吧,达成这个 service程序我们就称呼他为 daemon (守护神)。
在 CentOS7.0 后 不再使用 service ,而是 systemctl。

CentOS7.0 之前基本使用(过时)

service 服务名 [start | stop | restart | reload | status]

start #开始
stop  #停止
restart #重新启动
reload  #重新加载
status  #状态码

案例1:查看当前防火墙的状况,关闭防火墙和重启防火墙。

service iptables status
service iptables stop
service iptables restart

telnet 测试某个端口是否打开

telnet ip地址 端口

service这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用 chkconfig 指令给服务设定每次开机是否自动启动,在centos7中已经不再使用。

chkconfig [选项] 服务名称

–add 开启指定的服务程序
–del 关闭指定的服务程序
–list 列出chkconfig所知道的所有服务

CentOS7.0 之后基本使用


案例1:查看当前防火墙的状况,关闭防火墙和重启防火墙。

systemctl status firewalld
systemctl stop firewalld
systemctl restart firewalld


案例2:看看目前atd 这个服务的状态

案例3:正常关闭这个atd 服务

systemctl stop atd.service

atd现在是关闭的,未来重新启动后,这个服务会重新启动,因为这个命令只是临时关闭。

  • 在开机时启用一个服务:systemctl enable postfix.service
  • 在开机时禁用一个服务:systemctl disable postfix.service
  • 查看服务是否开机启动: systemctl is-enabled postfix.service
  • 查看已启动的服务列表: systemctl list-unit-files | grep enabled
  • 查看启动失败的服务列表: systemctl --failed

动态进程监控

ps 是撷取一个时间点的进程状态, top 则可以持续侦测进程运作的状态。

语法:

top [-d 数字] | top [-bnp]

选项与参数:

案例1:每两秒更新一次进程状况:

top -d 2

  • 第一行(top…):这一行显示的信息分别为:
    • 目前的时间,即是 14:44:09 ;
    • 开机到目前为止所经过的时间,即是 up 22 min;
    • 已经登入系统的用户人数,即是 2 users ;
    • 系统在 1, 5, 15 分钟的平均工作负载。代表的是 1, 5, 15 分钟,系统平均要负责运作几个进程(工作)的意思。 越小代表系统越闲置,若高于 1 得要注意你的系统进程是否太过繁复了。
  • 第二行(Tasks…):显示的是目前进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)。 比较需要注意的是最后的 zombie 那个数值,如果不是 0 !好好看看到底是那个 process 变成僵尸了吧。
  • 三行(%Cpus…):显示的是 CPU 的整体负载,每个项目可使用 ? 查阅。需要特别注意的是 wa 项目,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比较大!因此这里得要注意这个项目耗用 CPU 的资源。
  • 第四行与第五行:表示目前的物理内存与虚拟内存 (Mem/Swap) 的使用情况。 swap 使用量要尽量的少!如果 swap 被用的很大量,表示系统的物理内存实在不足。
  • 第六行:这个是当在 top 程序当中输入指令时,显示状态的地方。

top 下半部分的画面,则是每个 process 使用的资源情况:

  • PID :每个 process 的ID号码。
  • USER:该 process 所属的使用者;
  • PR:进程的优先执行顺序,越小越早被执行;
  • NI:Nice 的简写,与 Priority 有关,也是越小越早被执行;
  • %CPU:CPU 的使用率;
  • %MEM:内存的使用率;
  • TIME+:CPU 使用时间的累加;

如果你想要使用内存使用率排序,则可以按下『M』, 若要回复则按下『P』即可。如果想要离开 top 则按下『 q 』。

案例2:监视特定用户
方法:
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可

案例3:终止指定的进程
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程 ID 号

案例4:观察单一进程
我们自己的bash PID 可以由$$变量取得,使用 top 持续观察该PID。

查看网络情况

netstat

netstat 的输出分为两大部分,分别是网络系统自己的进程相关性部分:

netstat -[atunlp]

选项与参数:


案例1:查看sshd服务的网络状态:

netstat -anp | grep sshd

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服