目录
一、程序、进程、线程
内核:内核的功能较多,包括但是不限于下面几种,进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等一系列功能
1、程序:程序是一种保存在硬盘、光盘等介质中静态保存的代码或者数据
2、进程:是在CPU以及内存中动态执行的程序代码,通常每个程序都可以创建一个或者多个进程
3、线程:是操作系统中能够进行调度的最小的单位,它被包含在进程中,是进程中实际运转的部分。一个进程中至少有一个线程才能正常运转,是进程内的一部分
总结一下就是:程序是存储在硬盘中的一串代码,只有在运转之后才会动态的形成进程,进程在接到这个任务之后会转交给手下的线程来进行处理任务。
二、查看进程信息
1.ps
查看进程的方法有多种,其中一个是——PS是一个能够查看静态进程并且统计出来的命令。
命令的格式也是非常的简单 就是ps加上选项就可以了,其中一个用法的选项也只有3项
a:显示当前终端下的所有进程信息,包括其他的用户进程
因为现在系统刚打开,当前终端下还只有三个进程,其中还有一个是ps 。
u:使用以用户为主的格式输出进程信息
简单来说就是显示详细的信息,跟上面的单独a选项的命令对比一下,就会发现,u选项比a选项多了不少属性。
x:显示当前用户在所哟终端下的进程信息,这个比较多,就不全部截图了
下面还有,是显示当前用户的所有进程,不限于当前终端。
一般情况下,ps都是跟aux三个选项一起使用,三个选项都不会单独拿出来使用。
就像这样,三个选项一起使用,查看用户的详细的进程信息,不过是静态的,读取一次就是一次的信息,想要新的只能再进行读取一次。
ps的另一个用法也是比较简单,同样也是只有三个选项,代表的含义也是相差不远。
-e:显示系统中的所有进程
简单干脆,就是字面意思,直接把系统中的所有进程显示出来。
-l:使用长格式显示进程信息
这个跟上面那个u差不多,都是显示出来进程的详细属性,方便查看。
-f:使用完整的格式显示进程信息
将进程的信息按照统计好的格式显示出来,看着更加的便捷
这三个也是跟上面三人组一样,一般都不会单独出现,都是“三人帮”,一起为ps服务
两个方式查看的表格,每列代表的含义大多都不一致,但是因为比较多,我就不一个一个都拉出来遛遛弯,知道代表的含义不一致就行了。
上面两个方式就是静态查看进程信息的方式。
2、top
另外一种就是比较常用的动态查询进程信息的命令——top
这个命令没什么说的,就只有一个命令,没有常用的选项,一般都是单独一个命令拿出来使用。
这个其实是每隔几秒就在跳动,懒得去截动图,感兴趣的可以去试一下top,是一个动态查看进程的命令,按Ctrl+C终止。
3、pgrep
这个与其说是查看进程信息不如说是查找进程
是通过pgrep命令来进行查找目标进程的PID(好方便你用这个PID关闭这个进程)
所以准确来说这个是个查找的命令
格式跟也比较简单,常用的命令也只有 -l
就是筛选出所有包含kw的进程并且显示出来,如果不加 -l就是只显示PID,不会显示后面的名字。也可以在条件的位置变成用户的名字,命令格式是 pgrep -l -u name 就能筛选出用户name(name指任意以存在的用户)下面的所有进程。
4、pstree
这个查找进程的方式我认为还蛮不错,是一个能直接以树状结构查看所有进程的命令,能够清晰看到一个进程下面有没有子进程。
pstree命令格式是 pstree [选项]
就可以了,常用的选项也比较少,只有三个,感兴趣也可以去man手册看看别的。
-a 是显示详细的信息
-u 是列出来对应的用户名
-p 是列出对应的PID号
默认情况下,正在进程的信息是放在根目录下的 proc中,以数字开头的文件夹的形式存放,这个数字就是进程的PID。
进入目标PID的文件夹之后,会发现一系列的文件跟文件夹
上面几种都是不同功能的查找的方式,都是比较常用的命令。
三、进程的启动与终止
前面说的是查找进程的方式,下面还有启动进程或者终止进程的方式,先来一个一个说吧
1、手动启动
手动启动大致分为两种,就是前台启动跟后台启动
前台启动是在你运行进程的时候,命令先显示在页面上,在命令执行完之前是不能进行任何操作的,下面这串命令是我随便找的一个,复制的多的文件,但是数量还是不是太多,所以进程有点快
就是在执行这个命令的过程中,是不能进行操作的只能终止或者等命令执行结束,就算此时敲了命令,也只能在此时的进程结束之后才能生效
后台启动,顾名思义,跟前台启动相反,是在启动进程之后挂在后台,是不影响你的正常操作的,使用的方式也很简单,只需要在命令串后面跟上 & 符号就可以。
还是之前的命令,设置为后台启动之后,你在前面还是能正常操作,等命令执行完成之后,会在你下次操作的后面提示,该命令已经执行完毕。所以在运行较大数据的文件的时候,还是将程序放在后台运行比较好。
2、进程的前后台调度
ctrl+z
是将当前正在运行的进程挂起,调度到后台并且停止
jobs
是查看处于后台的任务,前面已经查看两次了
查看现在有多少进程在后台挂着或者运行。
fg
再加上任务的序列号,就是第一列的数字,可以将后台的进程恢复到前台并且运行。
这三个对于处理进程也是非常重要,时常能遇到。
3、终止进程
终止进程的方式
第一种就很简单 ctrl+c,可以退出或者停止执行的任务,这个我就不演示了。
第二种是 kill
kill的使用的格式是: kill 任务的PID号 可以终止掉单个的进程
先找到要关闭的进程的PID,这里我是随便找的一个进程,然后用kill 加PID号,结束这个进程
在选择结束进程之后,会发现,进程结束不了。
因为这个进程正在别的地方运行着,是在用着的程序,是终止不了的。
如果非要删除这个命令不可,这个命令运行着影响服务器的正常运行,可以使用 kill -9 +PID 强制终止这个进程。
第三种是 pkill
这个是上面kill的加强版,是选择性的范围清除,常用的选项有下面这个
-u:根据用户来进行终止进程,例如张三用户下面运行着三个进程,可以用 pkill -u zhangsan 一次性全部清除,除了环境的进程清不掉,例如 bash,这个就是用这个范围清除清不了的。
这个举例的我就随便弄了一个进程演示一下。
四、计划任务管理
计划任务总的分为两种,第一种是一次性的任务,第二种是周期性的任务
第一种可以理解为手机上的闹钟,一种是你考试之类的需要早起一次,设置的一个只响一次的闹钟,响一次之后,自动关闭。
第二种就是你在上班,上学的时候,每天都在固定的时间点起床之类的,就是用手机设置一个每周几的几点定时响。闹钟就每次响完就待机,直到下次条件满足,也就是周几的时候的几点响,是一直都在运行的计划任务
一次性任务的命令就很简单
1、at
一次性计划任务的格式是:at 小时:分钟 年-月-日
是在2021年的9月17日的7点20分执行下面的命令,下面的命令也就是删除根目录下的所有文件
确定输好命令之后按ctrl+d运行这个计划就可以了
如果不确定是否创建成功可以用 atq 查看
可以根据日期对比是不是我们刚刚创建的计划
如果不想要这个计划,可以用 atrm 删除
删除的步骤非常简答,用上面的命令查看信息,并且看到计划的 ID ,就是第一列的数字
然后 atrm 2 这样就解除了任务
可以看到,直接就可以删除掉一个计划,就像是你睡觉之前临时接到通知,明天不用早起,就顺手把单次的闹钟关闭的时候。
周期性的计划任务比较复杂一些
2、crontab
周期性计划任务的配置格式是在配置文件中,位置处于 /etc/下的文件 crontab文件中
打开文件之后可以在下面看到一个小图标,就是周期性计划任务的书写格式
顺序是自上而下,依次是:分钟 小时 日期 月份 周几(这个比较特殊,准确来说数字是0-7,但是0跟7代表的都是周日)。这个写数字都可以用一些符号代替:
*:指这个数位的范围内所有的数字
,:间隔多个不连续的时间,例如1,6,9,13 是选择不连续的时间
-:是表示一个连续的时间 1-9 1点到9点
/:表示的是间隔的时间的频率
格式: crontab 选项 -u 用户
crontab有三个常用的选项
-e:新建一个周期性计划
-l:查看当前创建好的计划
-r: 删除一个计划任务,可以指定为某个用户下的计划任务
直接用这个命令新建一个计划任务,生效于root。
这串命令的意思是,每周、每月、每日、每小时的每一分钟执行一次ls ,注意这个命令要使用绝对路径。
在你设置的时间到达之后,系统会给你发送一个邮件,你到指定目录直接查看即可
这个邮件会列出命令信息,执行时间,执行结果等信息,每到一次时间就会提醒一次
不想要这个计划就可以用 crontab -r 删掉或者再进去修改配置,都可以。
总结
进程的查找,前后台切换,中断、终止,是很常用的命令,进场能够用到。而计划任务,更是几乎每天都要用到,因为有的时候需要执行某些命令,但是那个时候人已经不在岗位怎么办,所以只能定制一个定时任务,所以还是非常关键的功能。