Linux 进程及计划任务
导图
1.程序
程序:
2.进程
进程:
- 运行中的程序的一个副本,是被载入内存的一个指令集合,是资源分配的单位。
进程的特点:
-
-
UID、GID语境决定对文件系统的存取和访问权限
-
通常从执行进程的用户来继承
-
存在生命周期
-
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 [信号] 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 |
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 提供
-
依赖与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 命令。
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 02:00 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 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10 |
命令格式:
crontab [选项] [file]
功能 | |
---|---|
-u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i |
[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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律