Linux 进程及计划任务

导图

 

 

1.程序

程序:

  • 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具;

  • 用于描述进程要完成的功能,是控制进程执行的指令集。

2.进程

进程:

  • 运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。

进程的特点:

  • 进程ID(Process ID,PID)号码被用来标记各个进程

  • UID、GID语境决定对文件系统的存取和访问权限

  • 通常从执行进程的用户来继承

  • 存在生命周期

  • 都由其父进程创建

进程的创建:

CentOS 6的第一个进程为init(pid=1)

CentOS 7的第一个进程为systemd(pid=1)

系统启动的第一个用户级进程,是所有其它进程的父进程

进程:都由其父进程创建,fork(),父子关系,CoW:Copy On Write

CentOS 7
[root@localhost ~]# pstree -p   //树形列出进程 -p显示pid号
systemd(1)─┬─ModemManager(777)─┬─{ModemManager}(806)
           │                   └─{ModemManager}(808)
           ├─NetworkManager(854)─┬─{NetworkManager}(886)
           │                     └─{NetworkManager}(896)
           ├─VGAuthService(772)
           ├─abrt-watch-log(755)
           ├─abrt-watch-log(780)
           ├─abrtd(749)
           ├─accounts-daemon(774)─┬─{accounts-daemon}(799)
           │                      └─{accounts-daemon}(803)
           ├─alsactl(746)
           ├─at-spi-bus-laun(1992)─┬─dbus-daemon(1997)───{dbus-daemon}(1998)
           │                       ├─{at-spi-bus-laun}(1993)
           │                       ├─{at-spi-bus-laun}(1994)
           │                       └─{at-spi-bus-laun}(1996)
           ├─at-spi2-registr(2000)─┬─{at-spi2-registr}(2003)
           │                       └─{at-spi2-registr}(2004)
           ├─atd(1182)
........................

 

 

3.进程管理命令

3.1 ps

3.2 top

3.3 pgrep

3.4 pstree

3.5 lsof

3.6 vmstat

4.进程管理

4.1 手动启动

  • 前台启动:通过终端启动,且启动后一直占据终端

  • 后台启动:可通过终端启动,但启动后即转入后台运行(释放终端)

4.1.1把命令放进后台

让作业运行于后台

  • 运行中的作业: Ctrl+z

  • 尚未启动的作业: COMMAND &

第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。

注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的

4.1.2查看后台任务列表

jobs

4.1.3调出后台任务

fg

4.1.4继续任务

bg

4.1.5并行执行任务

[root@localhost ~]#ping 127.0.0.1&ping 127.0.0.2&ping 127.0.0.3&
killall ping

 

4.2 结束进程

4.2.1 kill

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

kill 命令的执行原理

kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

格式:
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 后台休眠

 

信号:

信号编号信号名含义
0 EXIT 程序退出时收到该信息
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化
2 INT 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号
3 QUIT 退出
9 KILL 杀死进程,即强制结束进程
11 SEGV 段错误
15 TERM 正常结束进程,是 kill 命令的默认信号

4.2.2 killall

killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用

格式:

killall   [选项]   [信号]   进程名

选项 作用
-i 交互式,询问是否要杀死某个进程
-l 忽略进程名的大小写

 

4.2.3 pkill

当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程

格式:

pkill   [信号]   进程名

pkill 踢出登陆用户

 pkill [-t 终端号] 进程名
 
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程

 

5.计划任务

5.1 at(一次性计划任务)

at 工具:

  • 由包 at 提供

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

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

  • 执行任务时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 [option] TIME
at [选项] [时间]
[HH:MM]  [yyyy-mm-dd]

HH:MM 在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
02:00    
HH:MM YYYY-MM-DD   规定在某年某月的某一天的特殊时刻进行该项任务
02:00 2016-09-20   
HH:MM[am|pm] [Month] [Date]
06pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks], 在某个时间点再加几个时间后才进行该
项任务
now + 5 min 
02pm + 3 days


[root@localhost ~]# rpm -q at
at-3.1.13-20.el7x86_64

[root@localhost ~]# atq
9 2013-07-26 0200 a root
#说明root用户有一个at任务在2013年7月26日02:00执行,工作号是9
[root@localhost ~]# atrm [工作号]
#删除指定的at任务

 

5.2 crontab (周期性计划任务)

按照预先设置的时间周期 分钟、小时、天、月、周重复执行用户指定的命令操作

周期时间的表达:

项目含义范围
第一个"*" 一小时当中的第几分钟(minute) 0~59
第二个"*" 一天当中的第几小时(hour) 0~23
第三个"*" 一个月当中的第几天(day) 1~31
第四个"*" 一年当中的第几个月(month) 1~12
第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日

周期表达中使用的符号:

特殊符号含义
*(星号) 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线) 代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

命令格式:

crontab    [选项]    [file]

选项功能
-u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i 在删除用户的 crontab 文件时,给确认提示。
[root@localhost ~]# crontab -e     //创建周期任务
no crontab for root - using an empty one
crontab: installing new crontab

[root@localhost ~]# crontab -l       //查看周期任务
* * * * 1  /usr/bin/cp   /ect/passwd  /data/passwd11     //分,时,日,月,周

[root@localhost ~]# crontab -r      //删除周期任务
[root@localhost ~]# crontab -l
no crontab for root

 

posted @ 2022-10-15 23:49  索罗大魔王  阅读(72)  评论(0编辑  收藏  举报