进程(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 的动态
d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 sq : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来s : 安全模式,将交谈式指令取消, 避免潜在的危机i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程n : 更新的次数,完成后将会退出 topb : 批次档模式,搭配 “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通过匹配其程序名,找到匹配的进程
-l 同时显示进程名和PID
-o 当匹配多个进程时,显示进程号最小的那个
-n 当匹配多个进程时,显示进程号最大的那个
注:进程号越大,并不一定意味着进程的启动时间越晚
pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁
-A: 各进程树之间的连接以ASCII码字符来连接-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误-p:同时列出每个进程的PID-u: 同时列出每个进程的所属账号名称查看待执行任务的列表
-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> <EOT> 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目录下生成一个执行文件
一次性计划任务实验结束
然后我们将任务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查看一下配置文件
、 ``发现之前配置的信息已经没有了