60

Linux进程管理

 5 years ago
source link: http://zhongfucheng.bitcron.com/post/linux/linuxjin-cheng-guan-li?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言

只有光头才能变强

回顾前面:

这篇主要讲解在 Linux下进程的管理

那么接下来就开始吧,如果文章有错误的地方请大家多多包涵,不吝在评论区指正哦~

声明:基于Centos6.9

一、Linux下的进程

每个用户均可同时运行多个程序。为了区分每一个运行的程序,Linux 给每个进程都做了标识 ,称为进程号(process ID),每个进程的进程号是 唯一 的。

Linux 给每个进程都打上了运行者的标志, 用户可以控制自己的进程 :给自己的进程分配不同的 优先级 ,也可以随时 终止 自己的进程。

  • 进程从执行它的用户处继承UID、GID,从而 决定对文件系统的存取和访问

Linux 不可能在一个 CPU 上同时处理多个任务(作业)请求,而是 采用 “分时” 技术 来处理这些任务请求。

使用PID区分不同的进程

  • 系统启动后的 第一个进程是init ,它的PID是1。init是唯一一个由系统内核直接运行的进程。
  • 除了init之外,每个进程都有 父进程 (PPID标识)
  • 每个进程还有四个 与用户和组相关的识别号

    • 实际用户识别号 (real user ID,RUID)
    • 实际组识别号 (real group ID,RGID)
    • 有效用户识别号 (effect user ID,EUID)
    • 有效组识别号 (effect group ID,EGID)
  1. RUID和RGID的作用: 识别正在运行此进程的用户和组
  2. EUID和EGID的作用: 确定一个进程对其访问的文件的权限

进程类型:

  • 交互进程
    • 由一个Shell启动的进程。
    • 交互进程既可以在前台运行,也可以在后台运行。
  • 批处理进程
    • 不与特定的终端相关联,提交到等待队列种顺序执行的进程。
  • 守护进程(Daemon)
    • 在Linux在启动时初始化,需要时运行于后台的进程。

进程的启动方式:

  • 手工方式:使用操作系统提供的用户接口
    • 前台
    • 后台 (&)
  • 调度方式:按照预先指定的时间执行
    • at
    • batch
    • cron

前台进程:

  • 指一个程序控制着标准输入/输出,在程序运行时,shell 被暂时挂起, 直到该程序运行结束后,才退回到 shell 。在这个过程中,用户不能再执行其它程序

后台进程:

  • 用户 不必等待程序运行结束 就可以 执行其它程序 。运行后台进程的方法是在命令行最后加上 “&”

进程和作业的区别:

  • 进程: 操作系统的概念 ,由操作系统负责管理
  • 作业: shell程序的概念 ,由shell程序负责管理
    • 一个操作系统可以启动多个shell程序,shell本身也是一个进程
    • 一个作业里至少包含一个进程,也可以包含多个进程
    • 作业分前台和后台运行之分

有了上面的知识点,我们就可以画出这么一张流程图:

ZZZfQn7.png!web

1.1管理进程常用命令

使用 ps 命令查看进程状态信息

  • ps -ef
  • ps aux

ps 命令参数说明:

ZvMbIfv.png!web

ps 命令输出说明:

nimyaaA.png!web

还有其他几个常用命令:

  • 注销后继续运行进程nohup 命令 [选项] [参数] [输出文件] &
    • 用过SpringBoot打jar包部署到Linux下的同学对上面这个命令一定不会陌生啦~
  • 杀死进程kill pid -9
  • free :查看内存使用状况
  • top :查看实时刷新的系统进程信息
  • 进程调度的优先权 nice 命令:
  • 进程运行后调整优先级: renice 命令。

VzuEJbR.png!web

作业控制是指控制当前正在运行的进程的行为,也被称为进程控制。

  • 暂时停止某个运行程序 使用 Ctrl+z
  • 列举作业号码和名称: jobs
  • 在后台恢复运行: bg
  • 在前台恢复运行: fg [%作业号码]
  • 发送信号: kill -[信号] pid

1.2进程练习题

以root账户登录,运行ps命令,选项分别用-a和-af;观察对比结果,并截图;运行ps命令,选项为-ef,观察结果;运行ps,选项为au,观察结果,并截图。

EN3Q7bB.png!web

zMjqeyz.png!web

Af67Rji.png!web

yiMnayn.png!web

切换到jkXX账户,用长格式列出/usr/bin/passwd命令,观察命令的权限属性;用后台方式运行passwd命令;运行ps命令,选项为-ao,参数为user,pid,ruid,euid,tty,cmd,观察结果并截图

yQvEveF.png!web

IbUVbej.png!web

切换到peter账户,用后台执行命令ls -l /usr/bin | more &,观察结果;上述命令再次执行两遍,观察结果;执行ps命令,选项为au,观察有哪些进程在运行;执行命令jobs,查看有哪些作业在运行;通过fg命令把后台命令转移到前台,使之结束,观察剩余作业;直到作业全部结束。

RryQZfR.png!web

AzimQbB.png!web

YJjuIbF.png!web

uqIvE33.png!web

yyYNN3j.png!web

EjINJzn.png!web

切换到jason账户,用nice命令启动在后台启动vi编辑软件,优先级增加10,用ps命令,选项为-l观察vi进程的优先级;用nice命令启动在后台启动vi编辑软件,优先级减少10,观察结果,为什么不成功;切换到root账户,用nice命令启动在后台启动vi编辑软件,优先级减少10;

a6nuqmv.png!web

FFvQJ3Q.png!web

e6Fru2m.png!web

qABVfib.png!web

ps命令中显示TTY代表什么?

答:tty代表字符终端。

ps命令的输出结果,哪个进程的状态为运行状态?哪个进程为休眠状态?

答:ps au命令的进程是运行状态,用R表示;其余的都是休眠状态。

passwd命令的euid为多少,它在执行中应获得谁的权限?

答:euid为0,它在执行中应获得文件所有者root的权限。

如果用chmod命令把passwd命令的suid属性去掉,在普通账户下运行passwd命令,可以修改密码吗?为什么?

答:不可以,因为passwd命令要修改shadow文件,shadow文件是root用户的,普通账户运行passwd命令,没有获得root用户权限,无法修改shadow文件。

nice命令减少优先级的值,需要什么样的权限?

答:需要root用户权限

二、守护进程

始终在 后台运行并响应合法请求的程序 称为守护(Daemon)进程。守护进程 不是由用户启动运行的,也不与终端关联

  • 一个实际运行中的系统一般会有多个守护进程在运行,且各个系统中运行的守护进程都不尽相同。
  • 除非程序异常中止或者人为终止,否则它们将一直运行下去直至系统关闭。
  • UNIX/Linux的守护进程在Windows系统中被称作“服务”。

守护进程的分类:

  • 系统守护进程
    • 计划性任务 daemon:如 atd、crond
    • 系统日志 daemon:如 rsyslogd
    • 打印假脱机 daemon:如 cupsd、lpd
    • 网络参数设置 daemon:如 network
  • 网络守护进程:
    • 各种网络协议侦听 daemon
    • 如:sshd、httpd、postfix、vsftpd
  • 网络超级服务器(Supper Server)
    • 如:xinetd 或 inetd

超级服务器的引入 xinetd

  • 对于系统所要提供的每一种网络服务,都必须 运行一个监听某个端口连接发生的守护程序 ,这通常意味着系统资源的浪费。
  • 为了避免系统 资源浪费 引入了“超级服务器”。超级服务器启动后同时监听它所管理的服务的所有端口
  • 当有客户提出服务请求时
    • 超级服务器会 判断 这是对哪一个服务的请求,然后再 开启 与此服务相应的守护进程
    • 由超级服务器产生的某服务的进程处理客户的请求,当处理 结束便终止 此服务进程
    • 超级服务器本身 继续监听其他 服务请求

YjiAVbu.png!web

守护进程的启动方式:

  • 独立启动
    • 独立运行的守护进程由init脚本负责管理,脚本存放在 /etc/rc.d/init.d/ 目录下
    • 所有的 系统服务都是独立运行的 。如:crond、syslogd等
    • 一些 常用的网络守护进程是独立运行 的。如:httpd等
  • 瞬态启动
    • 由网络超级服务器(xinetd)运行的守护进程,由xinetd管理的守护进程的配置文件存在 /etc/xinetd.d/ 目录下
    • 默认的xinetd的主配置文件是 /etc/xinetd.conf
    • 一些 不常用 的网络守护进程是由xinetd启动的,如:telnet、 tftp等
    • xinetd本身是独立运行的守护进程

2.1管理守护进程常用命令

chkconfig 命令的功能

  • 添加指定的新服务
  • 清除指定的服务
  • 显示由chkconfig管理的服务
  • 改变服务的运行级别
  • 检查服务的启动状态

chkconfig --list 会显示出对应的运行级别:

  • 0: 关机
  • 1: 单用户
  • 2: 无网络的多用户
  • 3: 命令行模式
  • 4: 未用
  • 5: GUI(图形桌面 模式)
  • 6 : 重启

ntsysv 管理守护进程

vaQRRfe.png!web

使用 service 管理守护进程

  • service --status-all
  • service server-name status
  • service server-name start|stop|restart

2.2守护进程练习题

安装守护进程工具ntsysv,并运行它;通过ntsysv界面,取消crond的自动启动,通过命令chkconfig来检查crond自动运行是否被取消;通过chkconfig命令设置crond启动启动,通过ntsysv检查结果;观察结果,并截图

rAnYjuM.png!web

v6zQr2n.png!web

QBFrqua.png!web

7BzYraU.png!web

2QNzEnM.png!web

编辑xinetd的主配置文件,修改链接instances = 2,重新启动xinetd;用putty以telnet方式连接到linux,用pstree命令观察xinetd启动的telnet进程数量;继续开启telnet链接,直到连接超过限制

mYjmAbq.png!web

BvyqYfj.png!web

i6VZV3f.png!web

编辑系统服务文件services,修改telnet服务的端口为27,重启xinetd;用putty以telnet方式连接到linux,显示当前的网络链接;恢复telnet默认的服务端口,并检查;观察结果,并截图。

jUFbU3M.png!web

jARjYjv.png!web

NfYFRbM.png!web

telnet服务端口可以改变吗?如果可以改变,连接telnet服务应注意什么问题?

答:telnet服务端口可以改变。连接telnet服务的时候,应该注意端口号修改为正在提供telnet服务的端口号。

修改telnet配置文件,需要xinetd服务重启吗?为什么?

答:需要重新启动xinetd服务,因为xinetd作为超级服务器,它负责管理telnet服务的启动,也要同时查看telnet的服务配置文件。当telnet服务配置文件修改的时候,xinetd服务需要知道配置文件的变化,重新启动会重新读取配置文件的内容,使之生效。

Telnet为什么可以看到脚本程序的执行结果?

答:telnet是一个远程的字符界面的网络工具,它实现了远程字符界面的标准输入和输出功能;脚本执行的结果是输出到标准输出设备,也就是字符界面的屏幕,telnet将标准输出通过网络传递到telnet客户端的屏幕上显示,因此它可以看到脚本程序执行的结果。

通过ntsysv命令和chkconfig命令打开守护进程启动运行的结果是否完全一样?有什么不同?

答:ntntsysv命令关闭守护进程,只是改变了当前用户运行级别的守护进程开关,具体来说,改变了3号运行级别命令行模式的守护进程开关。chkconfig命令默认改变3、4、5级别的全部开关,chkconfig还可以指定某个运行级别的守护进程开关。

三、安排自动化任务

调度任务的守护进程:

  • atd
  • crond

安排调度任务的几个命令:

  • at 安排作业在 某一时刻 执行一次
  • batch 安排作业在系统负载不重时执行一次
  • cron 安排 周期性运行 的作业

3.1atd守护进程

atd守护进程负责 监控一次性任务的执行 ,atd守护进程的执行参数 /etc/sysconfig/atd

控制普通用户的使用

  • /etc/at.allow 存在,仅列在其中的用户允许使用
  • /etc/at.allow 不存在,检查 /etc/at.deny ,没有列于其中的所有用户允许使用
  • 若两个文件均不存在,仅允许root用户使用
  • 空的 /etc/at.deny 文件,表示允许所有用户使用(默认值)

如何使用:

  • 安装命令 yum install at
  • atd的启动 service atd start
  • atd服务的查看 chkconfig --list | grep atd 或者 ps -aef | grep atd
  • at 命令格式及参数 at [-q 队列] [-f 文件名] 时间

3.2cron

  • crond守护进程负责监控 周期性任务 的执行
  • crond守护进程的执行参数配置文件 /etc/sysconfig/crond

控制普通用户的使用

  • /etc/cron.allow 存在,仅列在其中的用户允许使用
  • /etc/cron.allow 不存在,检查 /etc/cron.deny ,没有列于其中的所有用户允许使用
  • 若两个文件均不存在,仅允许root用户使用
  • 空的 /etc/cron.deny 文件,表示允许所有用户使用(默认值)

crond启动以后,每分钟唤醒一次,检测如下文件的变化并将其加载到内存

  • /etc/crontab :是crontab格式(man 5 crontab)的文件
  • /etc/cron.d/* :是crontab格式(man 5 crontab)的文件
  • /var/spool/cron/* :是crontab格式(man 5 crontab)的文件
  • /etc/anacrontab :是anacrontab格式(man 5 anacrontab)的文件

i6N7rqn.png!web

3.3安排自动化任务练习

安装at计划任务服务,并且启动它;在下午茶的时间,检查网卡信息;在两分钟之后,开启防火墙;2019年6月1日凌晨两点,服务器重启;明天晚上9点,关闭eth1;用命令检查正在等待的计划任务;用at -c检查正在等待任务的具体内容;删除其中一条任务,观察结果。观察结果,并截图

ieeA7vv.png!web

MBvQFzF.png!web

3mEv2yY.png!web

BFnUnar.png!web

UNfyInI.png!web

E7VNzaA.png!web

Yr6vIfQ.png!web

编辑一个文件myatXX(XX为学生的学号末两位),要求按顺序执行如下命令:返回用户主目录;查看用户账户名;查看当前系统运行的所有进程,并将记录保存到文件ps.log中;添加一个计划任务,要求下午5点执行文件中的命令;观察结果,并截图

MzIzq2F.png!web

Fv6N3eY.png!web

mymQFjj.png!web

FfamiiE.png!web

用普通账户jsjXX登录,添加一个计划任务,明天中午关闭eth0;更改at命令的相关配置文件,禁止jsjXX执行at命令,试验证之

MfaMJ3M.png!web

NZJvYjb.png!web

修改crontab文件,添加一个新的周期任务,要求如下:每间隔6个小时,把服务器正在监听的端口信息,保存到/root/net.txt文件中;每周五或者10,20,30日上午9:00到下午15:00,每个小时第10分钟,清除目录/tmp下的所有文件

RZv26nR.png!web

mmiM7nB.png!web

添加一个脚本,要求:每月执行该任务,查找/home目录下30天没有修改的文件,并删除它;脚本名称为clean-home

77Brayf.png!web

AjAFryR.png!web

UjiYnyN.png!web

iMJVBzi.png!web

登录jsj08 账务,用crontab -e命令编写一个周期任务,要求每个2分钟按顺序执行:显示当前系统时间;显示账户名;显示当前账户的进程信息;以上命令的结果,全部以追加式方式保存到用户主目录下文件,文件名为myplanXX(XX为学生的学号末两位)。用crontab -l检查编写的任务

aIJJb2E.png!web

u6fUVrr.png!web

viMZJrm.png!web

RB3EZj3.png!web

BvyUZrq.png!web

myatXX文件是否要修改权限,才能执行?

答:不需要。atd服务只是从myatXX文件中读取内容,真正执行的命令会存放在另外一个文件,我们用at -c命令可以看到这个真正执行文件内容。

脚本放在哪个目录下?脚本需要添加可执行属性吗?

答:脚本根据不同的周期放到不同的目录下,本题以月为周期执行,因此放入/etc/cron.monthly目录下。脚本需要添加可执行属性,因为这是真正可执行的脚本。

普通用户可以修改at服务的配置文件吗?

答:修改at配置文件需要root权限,普通用户不可以修改at的配置文件。

四、总结

本文主要是总结了Linux下操作进程和自动化任务知识~~~这两个知识点在Linux下也是很重要的,是学习Linux的基础~

继续完善上一次的思维导图:

2A3q2qq.png!web

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以 关注微信公众号:Java3y 。为了大家方便,刚新建了一下 qq群:742919422 ,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK