进程与计划任务管理

256 阅读12分钟

1. 什么是进程?

  • 内核功能:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等 对于所有的操作系统,都有基本的功能

  • 什么是程序?

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

    • 文件中静态保存的代码。

  • 什么是进程?

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

    • 动态执行的代码;

    • 父、子进程(每个程序可以创建一个或者多个进程)

    • 进程是正在执行的程序

  • 进程与线程的区别

    资源分配与调度

    • 进程是资源竞争的基本单位;

    • 线程是程序执行的最小单位;

2. 进程相关命令

进程的管理主要是指进程的关闭或者重启,我们一般关闭或者重启,都是关闭他的程序,而不是直接关闭或者重启进程的,比如要重启apach服务,一般使用命令"service httpd restart"或"systemctl restart httpd"重启apach进程。

而我们可以通过直接关闭进程来关闭或者重启apach吗?答案是可以的,这是就要依赖进程的信号(signal)了,我们可以用"kill -l"或"man7 signal"来查询相关

2.1 kill命令 -发出信号,控制进程

常用kill -9和kill -15

在运行程序时要对某些程序进程进行发送信号(一般用于关闭进程),可以使用kill命令和对应的pid号进行处理,这种方法对于后台运行的程序特别有用,kill有很多命令选项,我们一般常用的是-9和-15,(pstree可以查看pid号

  • kill -9+pid是立即结束进程的信号,

  • kill -15+pid是安全结束进程的信号

通过kill -l可以查询更多kill命令选项

[root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

2.2 ps命令 -查看静态的进程统计信息

ps即process state,默认显示当前终端的进程,linux系统的进程相关信息都保存在 /proc/pid(进程号)/文件夹中

选项:

选项功能
a显示终端上的所有进程,包括其它用户的进程。
u表示列出进程的用户。
x显示所有终端的进程。
-e显示系统内的进程信息
-l长格式显示更加详细的信息

可以看到,ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

常用组合命令

  • "ps-aux"查看系统中所有的进程**(经常使用的命令)**
  • "ps-le"可以查看系统中所有的进程,并且可以查看进程的父进程的pid和进程优先级
  • "ps -l" 只能看到当前 Shell 产生的进程

实例:

ps-aux输出含义

image.png

显示内容含义
USER该进程是由哪个用户产生的。
PID进程的 ID。
%CPU该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ该进程占用虚拟内存的大小,单位为 KB。
RSS该进程占用实际物理内存的大小,单位为 KB。
TTY该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端
STAT进程状态。常见的状态有以下几种:
1. -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
2. -R:该进程正在运行。
3. -S:该进程处于睡眠状态,可被唤醒
4. -T:停止状态,可能是在后台暂停或进程处于除错状态。
5. -W:内存交互状态(从 2.6 内核开始无效)。
6. -X:死掉的进程(应该不会出现)。
7. -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
8. -<:高优先级(以下状态在 BSD 格式中出现)
9. -N:低优先级。
10. -L:被锁入内存。
11. -s:包含子进程。
12. -l:多线程(小写 L)。
13. -+:位于后台。
START该进程的启动时间。
TIME该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND产生此进程的命令名。
ps -le输出含义

【例 2】"ps aux"命令可以看到系统中所有的进程,"ps -le"命令也能看到系统中所有的进程。由于 "-l" 选项的作用,所以 "ps -le" 命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了。\

[root@localhost ~]# ps -le
F S UID PID PPID C  PRI Nl ADDR  SZ WCHAN TTY      TIME  CMD
4 S   0   1    0 0  80   0 -    718 -     ?    00:00:02  init
1 S   0   2    0 0  80   0 -      0 -     ?    00:00:00  kthreadd
1 S   0   3    2 0 -40   - -      0 -     ?    00:00:00  migration/0
1 S   0   4    2 0  80   0 -      0 -     ?    00:00:00  ksoflirqd/0
1 S   0   5    2 0 -40   - -      0 -     ?    00:00:00  migration/0
省略部分输出

表 2 罗列出以上输出信息中各列的含义。
\

显示内容含义
F进程标志,说明进程的权限,常见的标志有两个: -
1:进程可以被复制,但是不能被执行;
4:进程使用超级用户权限;
S进程状态。具体的状态和"psaux"命令中的 STAT 状态一致;
UID运行此进程的用户的 ID;
PID进程的 ID;
PPID父进程的 ID;
C该进程的 CPU 使用率,单位是百分比;
PRI进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行(系统定义,不可更改);
NI进程的优先级,数值越小,该进程越早被执行;
ADDR该进程在内存的哪个位置;
SZ该进程占用多大内存;
WCHAN该进程是否运行。"-"代表正在运行;
TTY该进程由哪个终端产生;
TIME该进程占用 CPU 的运算时间,注意不是系统时间;
CMD产生此进程的命令名;

2.3 top命令-动态查看进程信息

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

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

  • 动态查看进程

image.png

top输出含义

第一行:任务队列信息

00:32:29系统时间
1 users:当前登录用户数
load average: 0.00,0.01,0.05平均负载,即单位时间内系统处理的任务数,后面三个数值 分别为1分钟、5分钟、15分钟前到现在的平均值

第二行: 系统进程信息

Tasks总进程数
running正在运行的进程数
sleeping休眠的进程数
stopped中止的进程数
zombie僵死的进程数

第三行: CPU占用信息

us用户占用
sy内核占用
ni优先级调度占用
id空闲CPU,要了解空闲的CPU百分比,主要看%id部分
waI/o等待占用
hi硬件中断占用
si软件中断占用
st虚拟化占用

第四行:内存占用信息

total =总空闲内存
free空闲内存
used己用内存
lbuff/cache物理内存和交换内存的缓冲区总和

第五行:交换空间(swap)占用信息

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

top常用命令:

命令代表的意思
P键根据CPU使用百分比大小进行排序
M键根据驻留内存大小进行排序
N键根据启动时间进行排序
c键切换显示命令名称和完整命令行
h键可以获得top程序的在线帮助信息
q键退出top程序
数字1键显示CPU个数和状态

2.4 pgrep(pid进程号匹配)

常用选项

  • 常用选项:

    -l显示进程名
    -U指定特定用户
    -t指定终端

常用组合命令实例

pgrep -l -u +用户名

[root@localhost ~]# pgrep -l -u root  (指定终端root,显示进程名)
1 systemd
2 kthreadd
3 ksoftirqd/0
5 kworker/0:0H
7 migration/0
8 rcu_bh
9 rcu_sched

pgrep -l -u +用户名|wc -l (指定终端root,显示进程名的行数)

[root@localhost ~]# pgrep -l -u root |wc -l
115

2.5 pstree (以树形结构显示进程信息)

pstree命令可以查看当前系统的进程树,包括个各进程对应的PID号、用户名、完整命令等信息

image.png

2.6 lsof(显示当前linux系统已打开的所有文件列表)

通过sof命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件

losf格式

losf [选项]

lsof常用选项

选项功能
-c字符串只列出字符串开头的进程打开的文件
默认不加任何如果不加任何参数,就会打开所有被打开的文件
+d目录名列出某个目录所有被进程调用的文件
+u用户名只列出某个用户的进程打开的文件
+p列出某个pid进程打开的文件

3.进程启动方式

3.1 手工启动

  •  前台启动:用户输入命令,直接执行程序
  •  后台启动:在命令行尾加入“&”符号

前台启动

前台启动适用于我们大多数命令,比如ls,cd,mkdir等基础命令

后台启动(在命令行尾加入“&”符号)

在我们进行复制或者解压tar包的时候,往往时间比较长,这个时候我们不能进行其他操作 这个时候在命令结尾处加上'&',可以使工作状态转入后台,我们就可以进行其他的操作了,一般推荐把需要需要花费较长时间的操作放在后台运行

[root@localhost /]# dd if=/dev/zero of=/data/ bs=1G count=10

image.png

jobs命令可以查看后台运行的进程

3.2 进程的前后台调度

  • 1.Ctrl+Z组合键

     将当前进程挂起,即调入后台并停止执行

image.png

  • 2.jobs: 查看处于后台的任务

image.png

  • 3.fg+进程序号: 恢复挂起命令到前台执行(配合jobs命令可以查看后台进程的序列号)

image.png

4.终止进程运行

4.1 Ctrl+C组合键

 中断正在执行的命令

4.2 kill-9(强制终止进程)

只能配合使用pid终止进程

4.3 killall(可以配合进程名关闭进程)

  • 4.pkill:根据特定条件终止相应进程: -U | 根据进程所属的用户名终止相应进程; | | -- | ----------------- | | -t | 根据进程所在的终端终止相应进程。

5.计划任务管理(本章重点)

5.1 at(一次性计划任务)

at命令用于在指定时间完成指定任务

格式:
at [HH:MM] [YYYY-MM-DD]
输入任务
(CTRL+D提交任务)

image.png

atq:查看任务列表

atrm:删除任务(其他命令可以输入at后tab补全查看)

先查看任务序号,再atrm删除定时任务

5.2 周期性任务设置:crontab(命令一定使用绝对路径)

crontab的基本格式

编辑计划任务
crontab -e [-u 用户名]             #-u缺省时默认是针对当前用户,只有超级用户才可以用-u
​
查看计划任务
crontab -l [-u 用户名]         
​
删除计划任务
crontab -r [-u 用户名] 
  • 时间数值的特殊标识方法:

    特殊字符说明
    *(星号)代表任何时刻都接受的意思。
    ,(逗号)代表分隔时段的意思
    -(减号)代表一段时间范围内
    /n(斜杠)n代表数字,代表每隔n单位间隔的意思
代表意义分钟小时日期月份命令
数字范围0~590~231~311~120~7需要执行的命令

如果忘记输入格式怎么办?

如果忘记crontab的固定格式可以查看/etc/crontab

cat /etc/crontab

image.png

举例

    1. 每隔两天的上午8点到11点的第3和第15分钟执行 命令:3,15 8-11 */2 * *
  • 2 实例2:每小时的第3和第15分钟执行 命令: 3,15 * * * * 

总结

总结

• 查看进程的命令(ps、 top、pgrep、 pstree)

• 进程控制

启动进程、调度进程、终止进程

• at命令 设置计划任务 (一次性任务)

• crontab计划任务的配置字段 (周期性任务)