Linux进程管理

通俗的来说进程是运行起来的程序。唯一标示进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的。

进程和程序区别

1.程序是静态概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的。

2.程序和进程无一一对应关系。一个程序可以由多个时程公用;另一一方面,一个进程在活动中有可顺序地执行若干个程序

父子进程的关系

1.子进程是由一个进程所产生的进程,产生这个子进程的进程称为父进程

2.在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程的数据和堆栈段以及父进程的进程环境。

3.父进程终止子进程自然终止。

进程管理的作用

其实进程就跟window的任务管理器差不多

  1. 查看服务器健康状态 「Top命令」
  2. 查看系统中的所有进程 「PS命令」
  3. 杀死进程 「Kill功能」

前台进程和后台进程

前台进程

在shell提示处理打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出提示符。这条命令与Shell异步运行,即在前台运行,用户在它完成之前不能执行别一个命令     很简单,我们在执行这个查找命令时,无法进行其它操作,这个查找就属于前台进程
后台进程

在Shell提示处打入命令,若后随一个&,Shell创建子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。这条命令与Shell同步运行,即在后台运行。”后台进程必须是非交互式的”

再来看这个命令就变成了后台进程,我们用同样的条件进行查找,把查找记过放到hzh/test/init.find这个文件中。不影响我们前台其它的操作。

查看用户信息  w[用户名]

  • up 5 days :距上次开机的系统运行时间
  • 1user :   当前在线用户数
  • load average:分别显示系统在过去1分钟、5分钟、15分钟内的平均负载情况
  • USER : 用户名
  • TTY: 用户登录的终端。tty代表本地,pts代表远程
  • FROM:用户从何处登录(“:0″代表用户是从X window下,打开文本模式登录的)
  • IDLE: 用户闲置时间。这个是个计时器,当用户输入命令,这个时间会被重置
  • JCPU:以终端号来区分,该终端所有相关的进程执行时,所消耗的cpu时间会显示在这里
  • PCPU:CPU执行程序消耗的时间
  • WHAT:用户目前执行的命令

查看进程信息  ps

ps [选项]

  • a:显示所有用户和进程
  • u:显示用户名和时间
  • x:显示没有控制终端的进程
  • e:显示所有进程,包括没有终端的进程
  • l:长格式显示
  • w:宽行显示,可以使用多个w进行宽行显示

ps使用案例

ps    查看隶属于自己的进程

ps -u (ps -l)   查看隶属于自己进程的详细信息

  • PID :      进程号
  • PPID:   父进程的进程号
  • TTY :    进程启动的终端(pts0/255 代表远程 , ? 代表由系统启动 ,tty1-tty6代表本地字符终端)
  • STAT :  进程当前状态(S休眠状态, Ss包含子进程,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止,+位于后台)
  • NI :        进程优先级
  • TIME:     进程自从启动以后启用CPU的总时间
  • COMMAND/CMD:进程的命令名
  • USER(UID):    表示用户的名字
  • %CPU:   占用CPU时间和总时间的百分比(如果有)
  • %MEM:  占用内存与系统内存总量的百分比(如果有)
  • VSZ 进程占用虚拟内存大小
  • Rss 占用实际内存大小

ps -le (ps -aux) 查看所有用户执行的进程的详细信息

ps -aux –sort pid 可以按照pid等信息进行排序显示

ps -uU  「用户名」  查看系统中指定用户执行的过程

ps -le | grep init  查看指定进程信息

kill终止进程

window下面,我们要结束一个进程,最简单的方式就是关闭这个程序,相应的进程也会随之结束,遇到不能关闭的情况。会打开任务管理器结果掉。那么在linux下如果做呢?我们可以使用kill命令来终止进程。

为什么要杀死进程?(跟windows的原因差不多)

* 该进程点用了过多的CPU时间

* 该进程缩住了一个终端,使其他前台进程无法运行

* 运行时间过长,但没有预期效果

* 产生了过多到屏幕或磁盘文件的输出

* 无法正常退出

kill -9   [进程号]  (强行关闭)

kill -l   查看kill编号

关闭图形程序: xkill
当你在终端下输入这个命令时,你的鼠标会变成一个小叉子,你只去点你想要关闭的窗口就可以关闭了

结束所有进程:    killall
查找服务进程号: pgrep  [服务名称]
关闭进程:          pkill    [进程名称]

一个存放内存中的特殊目录/proc,其实这是一个伪目录
这个目录比较特殊,他并不在我们磁盘上,而在我们的内存当中;当前系统运行的所有进程都动态的存放在这个目录中,每个编号就是以我们当前进程PID所命令的目录名。

进程的优先级

为什么我们的电脑可以边听音乐,边聊QQ,边上网,甚至还可以同时挂几个游戏。因为我们CPU运行超快。他可以把每个程序的进程排好队,这个执行一下,那个执行一下,因为cpu执行的非常快,所以,我们并感觉不到卡顿,我们会觉得各种程序是并行运行的。

当然,进程也会分个快慢缓急的,所以要对进程分个优先级。同学们在食堂排队打饭,总理来了,这优先级多高啊。同学们纷纷让开,先给总理打。

  • 优先级取值范围为(-20,19)

linux给我们提供的优先级的范围为-20到19,我们启动一个进程时,默认的优先级为0 ,-20的优先级为最大,或者说最高。当然,我们在设置的时候可以写-30,但系统默认为-20.

nice命令

指定程序的运行优先级

格式:nice -n command

例如:nice -5 command

renice 命令

改变一个正在运行的进程的优先级

格式: renice n pid

例如:renice -5 777

nohup命令可以在用户退出时继续执行某一进程

一般的命令在用户退登录后就停止执行了,nohup命令可以使进程在用户退出登录后仍旧继续执行,nohup命令将执行后的数据信息和错误信息默认存储到文件nohup.out中

格式:

nohup program &

例子:

[root@bogon cron]# nohup find / -name init* > /root/find.init &

如果我们没指定保存位置的话,系统默认会把查询的结果放到当前目录的nohup.out的文件中。我们一般不会去使用默认方式保存。

进程的挂起与恢复

当我们执行一条命令时,发现太慢或输出内容太多,最常用到的做法就是终止(ctrl+c),那么挂起呢?通俗一点就是暂停呗!^_^!!

进程中止(挂起)和终止

挂起(ctrl+z)
终止(ctrl+c)

进程的恢复:

恢复到前台继续运行(fg)
恢复到后台继续运行(bg)

查看被挂起的进程(jobs)

通过top命令查看进程

它比ps显示的信息更详细。而且是动态的噢,信息每三秒会变动一次哦!
信息的头5行包涵了我们需要了解的系统的健康状态

top - 00:38:08 up 6 days,  5:52,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  68 total,   2 running,  66 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016396 total,   129184 free,   376052 used,   511160 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   472688 avail Mem 

这个是我服务器上的状态,给大家分析一下这些头信息

  1. 当前时间 , 运行时间 , 用户数 , 系统过去1分钟,5分钟,15分钟的系统负载情况
  2. Taks : 系统总进程数 , 2个正运行, 66 个处在睡眠 , 0 个终止 , 0 个僵尸进程 ( 没有正确终止 )
  3. Cpu信息(百分比表示) : us用户占用, sy系统占用, 改变过优先级的用户进程占用的CPU, id :CPU空闲比 , wa等待输入输出占用 , hi硬中断占用 , si软中断 , st虚拟时间百分比
  4. 4\5行 : 总量 , 空闲量, 使用量, 缓存量

一般着重看CPU空闲和过去系统负载请况

  • d :   指定刷新的时间间隔
  • c :     显示整个命令而不仅仅显示命令名
  • u :   查看指定用户的进程
  • k :   终止执行中的进程
  • h or ?   获得帮助
  • r:      重新设定进程优先级
  • s:    改变刷新的时间间隔
  • W:  将当前设置写入~/.toprc文件中

查看进程树

pstree [选项]

  • -p 显示进程的ID
  • -u 显示所属用户

Linux定时任务

cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业

查看服务状态 systemctl status crond
一般Linux都安装了此服务

cron在3个地方查找配置文件:
  1. /var/spool/cron/ 存放的是每个用户包括root的crontab任务,一般一个用户最多只有一个crontab文件。(如下命令也是编辑这个文件)
  2. /etc/crontab 负责安排由系统管理员制定的维护系统以及其他任务的crontab
  3. /etc/cron.d/ 用来存放任何要执行的crontab文件或脚本

无论是何种配置,都需要编辑,内容格式如下:

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

crontab [选项] 通过此命令可以更改我们的任务

  • -e 编辑定时表
  • -r 清空定时表
  • -l 显示所有任务

发表评论

发表评论

*

沙发空缺中,还不快抢~