进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体
以一个工厂结构举例
应用程序=工厂
进程=车间
线程=工人
1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3、CPU分配给线程,即真正在处理器运行的是线程。
4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
Linux ps命令用于显示当前进程 (process) 的状态
a 显示当前终端下的所有进程信息,包括其他用户的进程、与“x”选项结合时将显示系统中所有的进程信息
u 使用以用户为主的格式输出进程信息
x 显示当前用户在所有终端下的进程信息
-e 显示系统内的所有进程信息
-l 使用长(Long)格式显示进程信息
-f 使用完整的(Full)格式显示进程信息
以简单列表的形式显示出进程信息
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]
以长格式显示系统中的进程信息
[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]
Linux top命令用于实时显示 process 的动态
[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通过匹配其程序名,找到匹配的进程
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
注:进程号越大,并不一定意味着进程的启动时间越晚
pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
查看待执行任务的列表
-V:显示版本号;
-q:查询指定队列的任务
atrm命令用于删除待执行任务队列中的指定任务
首先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查看一下配置文件