进程和计划任务管理

目录

引言

一、查看进程

1、程序和进程区别

程序

进程

2、查看进程

查看进程常用组合: ps aux

 ps -elf       将以长格式显示系统中的进程信息

top命令   查看进程动态信息

pgrep命令

pstree命令

二、控制进程

1、手工启动进程

2、调度启动

3、将后台的进程恢复运行

4、终止进程执行

三、at一次性任务设置

一次性计划任务

四、crontab周期性任务设置

crontab命令

crontab 命令管理用户的计划任务

crontab 命令格式

总结


引言

今天给大家分享一下关于程序和进程的内容,其实大家多程序这个词一点都不陌生,我们所有的服务都是需要通过程序运行来完成的,今天给大家说一说linux中的进程和程序

一、查看进程

1、程序和进程区别

程序

保存在硬盘、光盘等介质中的可执行代码和数据、                                                                         

静态保存的代码

进程

在CPU及内存中运行的程序代码                                                                                                       

动态执行的代码
父、子进程,每个程序可以创建一个或多个进程

2、查看进程

查看进程常用组合: ps aux

-a:显示当前终端下的所有进程信息,包括其他用户的进程
-u:使用以用户为主的格式输出进程信息
-x:显示当前用户在所有终端下的进程信息

[root@localhost ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193700  6892 ?        Ss   08:01   0:02 /usr/lib/sy
root          2  0.0  0.0      0     0 ?        S    08:01   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:01   0:00 [ksoftirqd/
root      58277  0.0  0.0 151064  1816 pts/0    R+   19:05   0:00 ps aux


USER:启动该进程的用户账号的名称
PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的
%CPU:CPU 占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量(KB)
RSS:该进程占用的物理内存量(KB)
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为“?”

简说:pts 是远程登录终端 ctrl+ALT F1-F6   tty1 图像界面   2和6 字符界面    ?是系统本身自身执行的进程

STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态;S:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
D:系统守护进程
T:调式、程序执行一般停止
R :该程序目前正在运作,或者是可被运作;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。                 

T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态   

D 不可中断状态.

它们含意如下::
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比

START:启动该进程的时间。
TIME:该进程占用的 CPU 时间。
COMMAND:启动该进程的命令的名称

 ps -elf       将以长格式显示系统中的进程信息

[root@localhost ~]# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY      TIME       CMD
1 S root          2      0  0  80   0 -     0 kthrea 08:01 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 08:01 ?       00:00:00[ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 08:01 ?      00:00:00[kworker/0:0H]
0 R root      58400  12940  0  80   0 - 37766 -      19:16 pts/0  00:00:00 ps -elf


-e:显示系统内的所有进程信息。
-1:使用长格式显示进程信息。
-f:使用完整的格式显示进程信息

各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID.
PPID:父进程的进程号(如果该进程是由另一“个进程启动的)
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI: 谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。   pts/0255代表虚拟终端,一般是远程连接的终端;tty1tty7 代表本地控制台终端
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。

僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵厂进程。

top命令   查看进程动态信息

uptime    19:23:37         #当前时间
up 20days                     #系统运行时间 ,说明此服务器连续运行 20 天了
2 user                           #当前登录用户数
load average: 0.00, 0.01, 0.05    #系统负载,即任务队列的平均长度。 三个数值分别为 1 分钟、5 分钟、15 分钟前到现在的平均值。                                                                                                 

系统任务(Tasks)信息:

total 总进程数                       running正在运行的进程数                             sleeping  休眠的进程数   

stopped,中止的进程数       zombie,僵死无响应的进程数

CPU 占用信息

us,用户占用                                             sy,内核占用                              ni,优先级调度占用id,空闲CPU                                             wa,I/O 等待占用                        hi,硬件中断占用   si,软件中断占用                       

st,虚拟化占用。要了解空闲的 CPU 百分比,主要看%id 部分

内存占用(Mem)信息

total,总内存空间                                       free,空闲内存                            used,已用内存buff/cache,物理内存和交换内存的缓冲区总和

交换空间(Swap)占用

total,总交换空间                                               free,空闲交换空间;used,已用交换空间     avail Mem,可用物理空间

运行进程信息

PID    进程 id
USER    进程所有者的用户名
PR    优先级(由内核动态调整),用户不能
NI    进程优先级。 nice 值。负值表示高优先级,正值表示低优先级,用户可以自己调整         

VIRT(virtual memory usage)    虚拟内存,是进程正在使用的所有内存(ps 中标为 VSZ) VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请 100m 的内存,但实际只使用了 10m,那么它会增长
100m,而不是实际的使用量

RES(resident memory usage)    是进程所使用的物理内存。实际实用内存(ps 中标为 RSS)

RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括 swap out
2、包含其他进程的共享
3、如果申请 100m 的内存,实际使用 10m,它只增长 10m,与 VIRT 相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR    共享内存大小,单位 kb SHR:shared memory 共享内存
1、除 M 了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR 
4、swap out 后,它将会降下来

S    进程状态
D=不可中断的睡眠状态
R=运行中或可运行S=睡眠中
T=已跟踪/已停止Z=僵停

%CPU    上次更新到现在的 CPU 时间占用百分比
%MEM    进程使用的物理内存百分比
TIME+    进程使用的 CPU 时间总计,单位 1/100 秒
COMMAND    命令名/命令行

top 命令全屏操作界面快捷键:
默认 3s 刷新一次,按 s 修改刷新时间按空格 :立即刷新。
P:按 CPU 排序
M:按内存排序
T:按时间排序
p: 进程 IP,查看某个进程状态
N 键根据启动时间进行排序
数字键 1:显示每个内核的 CPU 使用率u/U:指定显示的用户
h:可以获得 top 程序的在线帮助信息
q:键可以正常地退出 top 程序

注:若通过 top 排名工具发现某个进程 CPU 占用率非常高,需要终止该进程的运行,可以在 top 操作界面中按 k 键,然后在列表上方将会出现“PID to signal/kill [default pid = 3180]:” 的提示信息,根据提示输入指定进程的 PID 号并按 Enter 键, 出现“Send pid 5597 signal [15/sigterm]”的二次确认的提示信息,然后按Enter 键确认即可终止对应的进程。

pgrep命令

-l:选项可同时输出对应的进程名以及PID
-U:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程

pstree命令

-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息

二、控制进程

1、手工启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程。根据该进程是否需要占用当前的命令终端,手工启动又可以分为前台启动和后台启动。

格式:操作  &

2、调度启动

挂起当前的进程
当Linux操作系统中的命令正在前台执行时(运行尚未结束),按Ctrl+Z组合键可以将当前进程挂起(调入后台并停止执行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,打包usr并且调入后台 ,可以按 Ctrl+Z 组合键将该下载任务调入后台并暂停执行

3、将后台的进程恢复运行

使用 bg(BackGround,后台)命令,可以将后台中暂停执行(如按 Ctrl+Z 组合键挂起)的任务恢复运行,继续在后台执行操作;
使用 fg 命令(ForeGround,前台),可以将后台任务重新恢复到前台运行。
除非后台中的任务只有一个,否则 bg 和 fg 命令都需要指定后台进程的任务编号作为参数

jobs命令查看处于后台的任务列表

-l:选项可以同时显示该进程对应的PID号

4、终止进程执行

使用 kill 命令终止进程
kill -9  进程号

killall 命令终止服务下所有进程
killall -9 服务名

pkill 命令终止指定用户进程
pkill -9 -U 用户
 

三、at一次性任务设置

一次性计划任务

在 Linux 操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务(如定期备份、定期采集监测数据)。CentOS 系统中默认已安装了 at、cronie 软件包,通过 atd 和 crond 这两个系统服务实现一次性、周期性计划任务的功能,并分别通过 at、crontab 命令进行计划任务设置

[root@localhost ~]# date                              #查看日期
2021年 08月 17日 星期二 21:01:56 CST
[root@localhost ~]# at 21:06 2021-08-17               #设置计划时间
at> pgrep -U root |wc -l >/tmp/ps.root                #设置计划
at> <EOT>                                             #ctrl+d 提交
job 2 at Tue Aug 17 21:06:00 2021
[root@localhost ~]# atq                               #查询计划
2	Tue Aug 17 21:06:00 2021 a root
[root@localhost ~]# atrm 2                            #删除计划
[root@localhost ~]# atq

四、crontab周期性任务设置

crontab命令

按照预先设置的时间周期(分钟、小时、天......)重复执行用户指定的命令操作
属于周期性计划任务                                                                                                                   

主要设置文件
全局配置文件,位于文件:/etc/crontab                                                                                               

系统默认的设置,位于目录: /etc/cron.*/
用户定义的设置,位于文件: /varlspool/cron/用户名

crontab 命令管理用户的计划任务

-e:编辑计划任务列表。
-u:指定所管理的计划任务属于哪个用户,默认是针对当前用户(自己)
-l:列表显示计划任务。
-r:删除计划任务列表。

crontab 命令格式

时间数值的特殊表示方法

*     表示该范围内的任意时间

,     表示间隔的多个不连续时间点

-     表示一个连续的时间范围

/      指定间隔的时间频率

应用示例
0 17 * * 1-5          #周一到周五每天17:00
30 8 * *1,3,5        #每周一、三、五的8点30分
0 8-18/2 * **        #8点到18点之间每2小时
* */3* *                 #每3天

总结

今天分享的是我们工作中进程需要用到的一些知识,比如把程序调到后台运行,在调到前台,有一个是我个人觉得很好用的命令,就是最后分享的crontab,他可以定时来帮我们完成操作,只要你设置完成后,完全不需要你在来操作,这个也是我们日常生活中也会用的一个定时操作
 

package cn.feike.shoot; import java.awt.Graphics; import java.awt.image.BufferedImage; public abstract class FlyingObject { protected double x;//物体的x坐标 protected double y;//物体的y坐标 protected double width;//物体的宽 protected double heigth;//物体的高 protected BufferedImage image;//当前正在显示的图片 protected int index = 0;//图片数组下标序号,子类中使用 protected double step;//飞行物每次(1/24秒)移动的距离 protected int life;//命 protected int state;//飞行物的状态 public static final int ACTIVE=0;//活着状态 public static final int DEAD=1;//死亡状态 public static final int REMOVE=2;//回收状态 //默认构造器 public FlyingObject() { life = 1; state = ACTIVE; } //有参构造器 public FlyingObject(double width,double heigth){ this();//调用无参数的构造器,必须写在第一行. this.x = (int)(Math.random()*(480-width)); this.y = -heigth; this.width = width; this.heigth = heigth; step = Math.random()*3+0.8;//初始化step为[0.8,3.8)之间的数 } //重写toString方法 public String toString() { return x+","+y+","+width+","+heigth+","+image; } //重写paint,方便子类对象的使用 public void paint(Graphics g) { g.drawImage(image, (int)x, (int)y, null);//绘制图片 } //飞行物移动的move方法 /** * 重构了move,方法实现播放销毁动画功能 */ public void move(){ if(state == ACTIVE){ y += step; return ; } if(state == DEAD){ //从子类对象中获取下一张照片 BufferedImage img = nextImage(); if(img == null){ state = REMOVE;//没有照片则回收 }else{ image = img;//否则把子类的图片传给image } //越界则销毁 if(y>=825){ state = REMOVE; } } } /** * 子类中必须有的方法,返回下一个要播放的照片引用, * 如果返回null表示没有可播放的照片了. */ protected abstract BufferedImage nextImage(); /** * 飞行物被打了一下 */ public void hit(){ if(life>0){ life--; } if(life==0){ state = DEAD; } } /** * 碰撞检测的方法 * 检测物体的位置是否在碰撞的范围内. * (子弹是否在飞行物的碰撞范围内) */ public boolean duang(FlyingObject obj){ //this(x,y,w,h) //obj(x,y,w,h) double x1 = this.x - obj.width; double x2 = this.x + this.width; double y1 = this.y - obj.width; double y2 = this.y + this.heigth; return x1<obj.x&&obj;.x<x2&&y1;<obj.y&&obj;.y<y2; } /** 重构FlyingObject,添加了状态检查方法 */ /** 检查飞行物死了吗 */ public boolean isDead(){ return state == DEAD; } /** 检查飞行物是否活动的 */ public boolean isActive(){ return state == ACTIVE; } /** 检查飞行是否可以被删除*/ public boolean canRemove(){ return state == REMOVE; } /** 飞行物添加"去死"方法*/ public void goDead(){ if(isActive()){ state = DEAD; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值