初学者的Linux进程和计划任务管理

Linux进程和计划任务管理

文章目录

  • Linux进程和计划任务管理
      • 进程
      • 应用程序,进程和线程的关系
        • 线程和进程的关系
        • Linux ps命令
          • ps aux命令
          • ps -elf 命令
          • top 命令
          • pgrep命令
          • pstree命令
          • atq 命令
          • atrm命令
    • 实验:一次性计划任务
      • 命令:at
      • 这边我们再次生成一个新的任务
    • 周期性计划任务

进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体

应用程序,进程和线程的关系

以一个工厂结构举例

应用程序=工厂

进程=车间

线程=工人

线程和进程的关系

1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3、CPU分配给线程,即真正在处理器运行的是线程。

4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。


Linux ps命令

Linux ps命令用于显示当前进程 (process) 的状态

a 显示当前终端下的所有进程信息,包括其他用户的进程、与“x”选项结合时将显示系统中所有的进程信息
u 使用以用户为主的格式输出进程信息
x 显示当前用户在所有终端下的进程信息
-e 显示系统内的所有进程信息
-l 使用长(Long)格式显示进程信息
-f 使用完整的(Full)格式显示进程信息

ps aux命令

以简单列表的形式显示出进程信息

root         171  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/25-pciehp]
root         172  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/26-pciehp]
root         173  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/27-pciehp]
root         174  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/28-pciehp]
root         175  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/29-pciehp]
root         176  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/30-pciehp]
root         177  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/31-pciehp]
root         178  0.0  0.0      0     0 ?        S    03:02   0:00 [irq/32-pciehp]

ps -elf 命令

以长格式显示系统中的进程信息

[root@localhost ~]# ps -elf
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root           1       0  0  80   0 - 61232 do_epo 03:02 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --d
1 S root           2       0  0  80   0 -     0 -      03:02 ?        00:00:00 [kthreadd]
1 I root           3       2  0  60 -20 -     0 -      03:02 ?        00:00:00 [rcu_gp]
1 I root           4       2  0  60 -20 -     0 -      03:02 ?        00:00:00 [rcu_par_gp]
1 I root           6       2  0  60 -20 -     0 -      03:02 ?        00:00:00 [kworker/0:0H-kblockd]
1 I root           7       2  0  80   0 -     0 -      03:02 ?        00:00:00 [kworker/u256:0-events_unbound]
1 I root           8       2  0  60 -20 -     0 -      03:02 ?        00:00:00 [mm_percpu_wq]

top 命令

Linux top命令用于实时显示 process 的动态

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
[root@localhost ~]# top
top - 04:01:33 up 58 min,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 172 total,   1 running, 170 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.1 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   3752.1 total,   3069.4 free,    295.6 used,    387.1 buff/cache
MiB Swap:   4044.0 total,   4044.0 free,      0.0 used.   3214.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                     
   5339 root      20   0  161180   5368   4044 S   0.3   0.1   0:00.26 sshd                                                        
      1 root      20   0  244928  13872   9228 S   0.0   0.4   0:01.46 systemd                                                     
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd                                                    
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                      
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp             
pgrep命令

经常要查看进程的信息,包括进程的是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程

  • -l 同时显示进程名和PID

  • -o 当匹配多个进程时,显示进程号最小的那个

  • -n 当匹配多个进程时,显示进程号最大的那个

注:进程号越大,并不一定意味着进程的启动时间越晚

pstree命令

pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁

  • -A: 各进程树之间的连接以ASCII码字符来连接
  • -U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误
  • -p:同时列出每个进程的PID
  • -u: 同时列出每个进程的所属账号名称
atq 命令

查看待执行任务的列表

-V:显示版本号;
-q:查询指定队列的任务

atrm命令

atrm命令用于删除待执行任务队列中的指定任务


实验:一次性计划任务

命令:at

首先date查看时间

root@localhost ~]# date
2020年 07月 03日 星期五 03:17:33 EDT

我这边往后推3分钟,进行任务

[root@localhost ~]# at 03:20 2020-07-03
warning: commands will be executed using /bin/sh
at> ps aux | wc -1 > /opt/ps.txt

配置完成,Ctrl+D,提交配置

at> 
job 1 at Fri Jul  3 03:20:00 2020

然后使用atq查看

[root@localhost ~]# atq
1	Fri Jul  3 03:20:00 2020 a root

等待3分钟后,我们查看一下opt目录,并且atq再次查看一下

[root@localhost ~]# ls /opt
ps.txt
[root@localhost ~]# atq
[root@localhost ~]# 

这边看到之前的任务计划已经消失,opt目录下生成一个执行文件

一次性计划任务实验结束


这边我们再次生成一个新的任务

at> ps aux | wc -1 > /opt/ps.txt
at> 
job 4 at Fri Jul  3 03:30:00 2020
[root@localhost ~]# atq
4	Fri Jul  3 03:30:00 2020 a root

然后我们将任务4进行删除,再查看一下

[root@localhost ~]# atrm 4
[root@localhost ~]# atq
[root@localhost ~]# 

这边看到任务4已经被删除


周期性计划任务

先查看一下周期性计划任务的配置文件

这边cat命令查看

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

[root@localhost ~]# 

然后我们输入crontab -e命令,进入配置文件进行配置


40 15 * * * /usr/bin/cp -r /home/zhangsan /opt/
~                                                                                                                                   
~                                                                                                                                   
~   

wq保存退出

查看一下配置好的任务

[root@localhost ~]# crontab -l
40 15 * * * /usr/bin/cp -r /home/zhangsan /opt/

然后先查看一下opt目录和home目录

[root@localhost ~]# ls /opt
ps.txt
[root@localhost ~]# ls /home
zhangsan

我们等到40分钟后,再查看一下opt目录,看下是否有将zhangsan用户复制到opt目录中

[root@localhost ~]# ls /opt
ps.txt  zhangsan

我们再查看一下任务计划

[root@localhost ~]# crontab -l
43 03 * * * /usr/bin/cp -r /home/zhangsan /opt/
发现任务还存在

这边我们将这个任务删除

[root@localhost ~]# crontab -r

再使用命令crontab -e查看一下配置文件

初学者的Linux进程和计划任务管理_第1张图片
``发现之前配置的信息已经没有了

你可能感兴趣的:(初学者的LINUX)