Linux进程管理与监控

一、相关概念

1、进程的的基本定义

在自身的虚拟地址空间运行的一个独立的程序,从操作系统的角度来看,所有在系统上运行的东西,都可以称为一个进程

2、进程的分类   

系统进程:可以执行内存资源分配和进程切换等管理工作;该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。

用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。         

交互进程:由一个shell终端启动的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行在后台。         

批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。         

守护进程:守护进程是一直运行的一种进程,经常在linux系统启动时启动,在系统关闭时终止。例如:(1)httpd进程,一直处于运行状态,等待用户的访问;(2)crond进程,这个进程类似与windows的计划任务,可以周期性的执行用户设定的某些任务。

二、涉及进程的相关指令

在linux系统中,进程ID(用PID表示)是区分不同进程的唯一标识,它们的大小是有限制的,最大ID为32768,用UID和GID分别表示启动这个进程的用户和用户组。所有的进程都是PID为1的init进程(centos7.x版本是systemd进程)的后代。内核在系统启动的最后阶段启动init进程,因而,这个进程是linux下所有进程的父进程,用PPID表示父进程。

1、top指令

具体每个参数的含义在常用指令集合有详细介绍了,另外补充一下,在top命令下摁“F”可以定制功能,有“*”是已经定制的,按空格键可以定制,按ESC退出。

2、ps指令

ps -ef指令下会显示此时进程的信息,中括号括起来大部分一般是系统进程,系统进程一般排在前面,用户一般无法参与。

另外还有常用的ps -aux命令显示更详细一些。

ps -ef|grep sshd  #过滤查看某进程(sshd)的信息

3、pgrep指令

pgrep是通过程序的名字来查询进程PID的工具,支持模糊匹配,它通过检查程序在系统中活动的进程,输出进程属性匹配命令行上指定条件的进程的ID

pgrep -f sshd    #查看sshd进程对应的所有ID

ps -ef|grep sshd  #像之前提到的ps指令也可以查看,但不够简洁

4、lsof指令

经常用来查看某个进程打开多少文件,解决某个进程超过最大值而可能出现诸多问题。

lsof -p PID     #PID是进程号,通过进程号显示程序打开的所有文件及依赖相关进程

lsof -i     #通过监听指定的协议、端口、主机等信息,显示符合条件的进程信息。一个端口对应的那些进程,例如lsof -i :80/25/22    lsof -i tcp:80/25/22

lsof -c 进程名称    #例如sshd,类似PID,但比-p显示更多    

lsof -c sshd|wc -l     #查看sshd打开了多少个文件

5、kill指令

用kill终止一个进程

kill [信号类型] 进程PID     

信号类型有很多种,可以通过kill –l查看所有信号类型。常用的信号类型有SIGKILL,对应的数字为9,还有SIGTERM和SIGINT,对应的数字分别为15和2。

kill -9 进程PID    #表示强制结束进程。   

kill -2 进程PID    #表示结束进程,但是并不是强制性的,常用的ctrl+c组合键发出的就是一个kill -2的信号。

kill -15 进程PID    #表示正常结束进程,是kill的缺省选项,也就是kill不加任何信号类型时,默认类型就是15。

kill -0 进程PID    #写脚本时候用,对服务、进程的状态进行试探,对一个进程进行是否存在。执行-0后,通过  echo $?  指令,返回值为0则执行成功,其他数字是执行不成功。

6、killall指令

用killall终止一个进程。

killall也是关闭进程的一个命令,与kill不同的是,killall后面跟的是进程的名字,而不是进程的PID,因而,killall可以终止一组进程

killall [信号类型] 进程名称    #信号类型与kill一致,进程名称例如java、httpd、mysqld、sshd、sendmail等。 

 三、任务调度进程crond

1、相关概念

crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似。

2、分类     

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

(1)系统任务调度

系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。当然还有cron.各种副文件,都是系统直接配置好的,可以自己修改。

(2)用户任务调度

用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

3、crond的使用(针对用户任务调度)

(1)crontab常用的使用格式

crontab [-u user] [file]

crontab [-u user] [-e /-l / -r /-i ]    #没有跟用户默认执行当前用户

常用组合: crontab -e ;crontab -l

选项含义如下:

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般由root用户来运行。 

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。 -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:在删除用户的crontab文件时给确认提示。

(2)crontab文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。

(3)crontab应用举例

0   */3   *    *    *    /usr/local/apache2/apachectl restart     #表示每隔3个小时重启apache服务一次。  

30  3  *  *  6  /webdata/bin/backup.sh   #表示每周六的3点30分执行/webdata/bin/backup.sh脚本的操作。  

0  0  1,20  *  *   fsck /dev/sdb8   #表示每个月的1号和20号检查/dev/sdb8磁盘设备。  

10  5  */5  *  *   echo "">/usr/local/apache2/log/access_log 表示每个月的5号、10号、15号、20号、25号、30号的5点10分执行清理apache日志操作。

(4)使用crontab工具的注意事项

<1>注意环境变量问题:有时我们创建了一个crontab(他不会自动加载环境变量),但是这个任务却无法自动执行,而在命令行手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。这个时候我们需要在自己的/var/spool/cron/crontab文件下手动添加环境变量,例如:source /etc/profle(系统全局环境变量) source /root/.bashrc(用户环境变量)

问题比如在shell脚本里可以执行,但是放到crontab里面就不行了。

<2>注意清理系统用户的邮件日志:可以在crontab文件中设置如下形式,忽略日志输出:

0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

<3>系统级任务调度与用户级任务调度:系统级任务调度主要完成系统的一些维护操作(比如定时重启机器),用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行。 

(5)使用事例

<1>在root用户下,给huoserver用户进行用户级任务调度工作,首先进入编辑页面。

<2>写入的大致内容为:每个月的5号、10号、15号、20号、25号、30号的5点10分执行清理日志操作。

<3>这时我们发现在/var/spool/cron/  目录下出现了我们所设置的用户名的文件,内容也是我们刚才输入的。

<4>我们可以用tail -f /var/log/cron  命令来查看定时执行的任务

相关推荐

  1. Linux 进程管理

    2024-05-02 05:52:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-02 05:52:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-02 05:52:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-02 05:52:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-02 05:52:01       18 阅读

热门阅读

  1. 移动应用开发:Android vs iOS平台的选择与挑战

    2024-05-02 05:52:01       6 阅读
  2. 【C++之二叉搜索树】

    2024-05-02 05:52:01       13 阅读
  3. nginx配置tcp长连接实现集群

    2024-05-02 05:52:01       11 阅读
  4. Android UI:动画:视图动画

    2024-05-02 05:52:01       12 阅读
  5. 力扣501,二叉树中的众数

    2024-05-02 05:52:01       10 阅读
  6. CocoaPods:iOS项目依赖管理的利器

    2024-05-02 05:52:01       9 阅读
  7. 【刷爆力扣之637. 二叉树的层平均值】

    2024-05-02 05:52:01       10 阅读
  8. 2.DNS同时使用TCP和UDP协议?

    2024-05-02 05:52:01       10 阅读
  9. WPF之textbox输入框

    2024-05-02 05:52:01       7 阅读
  10. 冰蓄冷空调系统介绍

    2024-05-02 05:52:01       11 阅读
  11. C++人工智能01C版本

    2024-05-02 05:52:01       12 阅读