进程与计划任务管理

目录

一,进程和计划任务

1.程序

2.进程

2.1什么是进程

2.2 进程具有的特征:

3.进程使用内存的问题

4.线程

5.进程的优先级 os

6.PS命令—查看静态的进程统计信息

常用的参数

经常特别查看的:

7.TOP命令—查看进程动态信息

8.pgrep命令

9.pstree命令进程树

 10.终止进程执行

二、计划任务管理 

1.at一次性

​编辑 

2.crontab 周期性任务设置

 三,总结


一,进程和计划任务

内核功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等

1.程序

是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具用于描述进程要完成的功能,是控制进程执行的指令集

保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
二进制文件,静态/bin/data、/usr/sbin/sshd

2.进程

2.1什么是进程

在CPU及内存中运行的程序代码‘
动态执行的代码
父、子进程
每个程序可用创建一个或多个进程
进程是程序运行的过程、动态,有生命周期及运行状态

2.2 进程具有的特征:

动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行;

独立性:进程是系统进行资源分配和调度的一个独立单位;

结构性:进程由程序、数据和进程控制块三部分组成。

程序—>进程—>线程

进程与线程的区别:

线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进
程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。

3.进程使用内存的问题

内存泄漏:Memory Leak

指程序中用malloc或new申请了一块内存,但是没有用free或delete将内存释放,导致这块内存一直处于占用状态

内存溢出:Memory Overflow

指程序申请了10M的空间,但是在这个空间写入10M以上字节的数据,就是溢出,类似红杏出墙

内存不足:OOM

OOM 即 Out Of Memory,“内存用完了”,在情况在java程序中比较常见。系统会选一个进程将之杀死,在日志messages中看到类似下面的提示

Jul 10 10:20:30 kernel: Out of memory: Kill process 9527 (java) score 88 or sacrifice child

当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error,因为这个问题已经严重到不足以被应用处理)。

原因:

给应用分配内存太少:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。

应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。

使用的解决办法:

1,限制java进程的max heap,并且降低java程序的worker数量,从而降低内存使用

2,给系统增加swap空间

4.线程

线程状态:
1.新建(NEW):
新创建了一个线程对象。

2.可运行(RUNNABLE):
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。

3.运行(RUNNING):
可运行状态(runnable)的线程获得了cpu时间片(timeslice)执行程序代码。

4.阻塞(BLOCKED):

阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cup timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cup timeslice转到运行(running)状态。

 5.死亡(DEAD):

线程run()、main()方式执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生

 

进程更多的状态:

运行态:running

就绪态:ready

睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable

停止态:stopped,暂停于内存,但不会被调度,除非手动启动

僵死态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

示例

[root@Liq ~]#bash
[root@Liq  ~]#echo $BASHPID
1809
[root@Liq  ~]#echo $PPID
1436
#将父进程设为停止态
[root@Liq  ~]#kill -19 1436
#杀死子进程,使其进入僵尸态
[root@Liq  ~]#kill -9 1809
[root@Liq  ~]#ps aux #可以看到上面图示的结果,STAT为Z,表示为僵尸态
#方法1:恢复父进程
[root@Liq  ~]#kill -18 1436 
#方法2:杀死父进程
[root@Liq  ~]#kill -9 1436
#再次观察,可以僵尸态的进程不存在了
[root@Liq  ~]#ps aux

5.进程的优先级 os

进程优先级调整

静态优先级:100-139

进程默认启动时的nice值为0,优先级为120

只有根用户才能降低nice值(提高优先性)

ps axo pid,comm,ni
#查看

6.PS命令—查看静态的进程统计信息

常用的参数

-a 显示当前终端下的所有进程信息,包括其他用户的进程。与 x 选项结合时将显示系统中所有的进程信息。
-u 使用以用户为主的格式输出进程信息。
-x 显示当前用户在所有终端下的进程信息。

上述输出信息中,第一行为列表的标题,其中各字段的含义描述如下。
USER:启动该进程的用户账户的名称
PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存量(KB)。
TTY:表示该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
简单来说:pts是远程登录终端ctrl+ALT F1-F6 tty1 图像界面 2和6 字符界面 ? 系统本身自身执行的进程
STAT:该进程的状态(D:不可中断的休眠状态,S:处于休眠状态,可被唤醒,T:停止状态,可能是在后台暂停或进程处于跟踪调试状态,Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)

D:不可被唤醒的睡眠状态,通常用于I/O情况
T:停止状态,可能是在后台暂停或进程处于除错状态
R:该程序目前正在运作,或者是可被运作
S:该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号(signal)唤醒。
Z:该程序应当已经终止,但是其父程序却无法正常的终止他,造成zombie(僵死)程序的状态 D 不可中断状态,
<:表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
l:表示进程是多线程的
+:表示当前进程运行在前台
C:进程占用CPU的百分比

经常特别查看的:

D[aemon]:守护进程
R[unning]:正在运行
S[leep]:睡眠状态
Z[ombie]:僵尸状态

7.TOP命令—查看进程动态信息

ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。

为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

截屏示例中,开头部分显示了系统任务(Tasks)、CPU占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表示如下,

uptime:当前时间—17:54:17
up 系统运行时间
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:总内存空间,used:已用内存,free:空闲内存,buffers:缓存区域
交换空间(Swap)占用:total:总交换空间,used:已用交换空间,free:空闲交换空间,cached:缓存空间

8.pgrep命令

查看指定的进程

- -U 指定用户
- -l: 显示进程名
- -a: 显示完整格式的进程名
- -P pid: 显示指定进程的子进程

 

 

 

9.pstree命令进程树

 

pstree   [OPTION] [ PID | USER ]                                                                                                                                                                                                                                                                                                                                                                 
常用选项
-a	显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-T 不显示线程thread,默认显示线程
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

”pstree -aup"命令可以查看当前系统的进程树,包括各进程对应的PID号,用户名,完整命令等信息。从输出结果中可以看出,systemd进程确实是Linux系统中的进程的“始祖” ,可以配合grep使用。 

 10.终止进程执行

当用户在前台执行某个进程时,可以按Ctrl+C组合键强制进行中断(如命令长时间没有响应的情况下)。中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按Ctrl+C组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程工具 kill、killall和pkill。
kill支撑发生的信号列表可以通过kill -l 查看,而这些信号的具体含义可以通过man 7 signal 查看。

kill [信号] PID 
kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号

1) SIGHUP 无须关闭进程而让其重读配置文件
2) SIGINT 中止正在运行的进程;相当于Ctrl+c 3) SIGQUIT 相当于ctrl+\ 9) SIGKILL 强制杀死正在运行的进程,可能会导致数据丢失,慎用!
9)  关电源   数据库  写           
15) SIGTERM 终止正在运行的进程,默认信号
18) SIGCONT 继续运行
19) SIGSTOP 后台休眠
信号编号信号名含义
0EXIT程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

二、计划任务管理 

1.at一次性

at 工具

  1. 由包 at 提供

  2. 依赖与atd服务,需要启动才能实现at任务

  3. at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下

  4. 执行任务时PATH变量的值和当前定义任务的用户身份一致

at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

  • 如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。

  • 如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。

  • 如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可

at [HH:MM] [yyyy-mm-dd]

任务设置完毕后按Ctrl+D组合键提交 

 

 设置一条当天22:00自动关闭当前系统的任务

对应已经设置但还未执行(未到时间点)的计划任务,可以通过atq命令进行查询。但已经执行过的at任务将不会再出现再列表中,

 

2.crontab 周期性任务设置

在/etc/crontab 文件中设置的是维护Linux操作系统所需的任务,Linux操作系统及相关程序在安装时可自动设置,不建议用户手动修改此文件。例如,该文件中包括设置Shell环境,可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。执行如下的"cat /etc/crontab"命令可以查看/etc/crontab文件的具体内3容。

 SHELL=/bin/bash :设置执行任务的shell环境

PATH=/sbin:/bin:/usr/sbin:/usr/bin :定义可执行命令及程序的路径

MAILTO=root  :指定输出信息发到那个用户的邮箱

crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务
项目含义范围
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)



 */2 * * * *  /usr/bin/cp /etc/passwd  /opt/  #每两分钟执行脚本 复制/etc/passwd 到/opt中

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #命令所在路径

 三,总结

本次主要分享了进程与程序分别各自的含义,以及学会了如何在Linux中设置周期性任务,方便平时生产中的自动化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值