程序是保存在硬盘、光盘等介质中可执行的代码和数据,是静态的。而程序是在CPU及内存中运行的,动态执行的代码。
每个程序可以创建一个或多个进程。
ps命令是Linux系统中最为常见的进程查看工具,主要用于显示包含当前运行的各进程完整信息的静态快照。
ps命令
ps a //显示当前终端下所有的进程信息,包括其他用户的进程。
ps u //使用以用户为主的格式输出进程信息
ps x //显示当前用户在所有终端下的进程信息
ps ax //显示系统中所有的进程信息
ps -e //显示系统内的所有进程信息
ps -l //使用长(long)格式显示进程
ps -f //使用完整的(full)格式显示进程信息
通常我们执行“ps aux”或“ps -elf”命令,相比之下,ps aux这条命令显示的进程更加详细,我们也更常使用。
ps aux查看进程各参数信息
- USER:启动该进程的用户账号的名称
- PID :该进程在系统中的数字ID,在当前系统中是唯一的
- %CPU:占用CPU百分比
- %MEM:占用内存百分比
- VSZ: 占用虚拟机内存大小(swap)
- RSS: 占用物理内存的大小(物理内存)
- TTY :表明该进程在哪个终端上运行,“?”表示不需要终端
- STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵尸)、
<(高优先级)、N(低优先级)、s(父进程)、+(前台进程)、对
于僵尸进程要手动关闭
- START:启动该进程的时间
- TIME:该进程占用的CPU时间
- COMMAND:启动该进程的命令名称
与ps命令看到的静态的进程信息相反,top命令看到的是动态的进程信息,进程的信息一直是在不停的刷新的,默认是三秒刷新一次,相当与windows里面的任务管理器。
用法就是直接在字符界面输入“top”。我们就可以从中获取进程信息,如下图所示。
当我们在使用ps命令查看自己所需要的进程信息时,我们会用到grep命令筛选,这样使用有点不方便,于是出现了pgrep命令。
pgrep命令是用来查询特定进程信息的专用工具。可以通过进程的名称、运行进程的用户、进程所在终端等多种属性查询特定进程的PID号。
pgrep命令
pgrep -l //指定进程的一部分名称进行查询,同时输出PID与完整进程名
pgrep -U //查询特定用户的进程
pgrep -t //查询在特定终端运行的进程
通过进程树我们可以很好的看出父进程与子进程的关系
如果没有这条命令,我们需要用“yum -y install psmisc”命令 进行安装,因为这条命令属于外部命令。
pstree命令
pstree -a //显示完整信息
pstree -u //列出对应用户名
pstree -p //列出对应PID号
启动进程分为手工启动和调度启动两种。
手工启动又可以分为前台启动和后台启动
前台启动必须等到该进程执行结束并退出后才能继续输入其他命令。
后台启动需要使用“&”操作符,将这个操作符放到要执行命令的最后面,进程会直接放到后台执行,不占用前台的操作界面,可以在前台继续输入命令。
ctrl+Z //将当前进程挂起(调入后台并停止执行)
ctrl+c //终止执行进程
bg //将挂起的任务继续执行,不调到前台(foreground)
fg //将后台(background)的任务调到前台运行
jobs //查看后台的进程
jobs -l //查看后台进程的PID号
ctrl+c强制中断只能针对前台运行的进程,对于在后台或者其他终端运行的进程,我们就可以使用kill、pkill和killall命令来中断。
kill命令需要使用进程的PID号作为参数,无特定选项时,kill命令会给该进程发送终止信号并正常退出运行
kill命令
kill 进程PID号 //正常结束相应的进程
kill -9 进程PID号 //强制终止目标进程,有可能会造成数据丢失,慎用
killall可以通过进程名来终止进程,通常适用于系统中有多个相同名称的进程需要结束。
killall命令
killall 进程名 //结束进程名相同的进程,可以是多个
killall -9 进程名 //将所有与进程名相同的进程全部终止,容易终止系统
默认的某些服务,需要更加谨慎使用
pkill可以根据进程名称、运行进程的用户、进程所在终端等多种属性终止进程,与“pgrep”命令类似,可以参考。
pkill命令
pkill -U 用户 //指定运行进程的用户,结束进程
pkill -t 终端 //指定进程所在终端,结束进程
pkill -9 //强制终止,后面可以跟用户、终端等属性
我们平时执行的命令都是即时执行,在一些场合中我们可以设定计划任务,便于执行在我们不便的时候或者需要定期批量执行的任务。
centos7系统中计划任务由at和cronie软件包提供,可以实现一次性计划和周期性计划的功能。
at命令设置的计划任务只在指定的时间执行一次。要运行at命令,首先应该开启atd系统服务,执行任务的时间点在当前系统的时刻之后。
下面为演示过程
at命令应用
date //查看当前系统的时间
date -s "2020-06-24 16:30" //修改日期时间为2020年6月24日16时30分
at 16:40 2020-06-24 //一次性计划执行的时间点
at> pgrep -U root|wc -l >/opt/ps.root //计划执行的内容
at> <EOT> //ctrl+d提交任务
job 7 at Wed Jun 24 16:40:00 2020 //计划设置成功的提示
然后我们只要在指定的时间点查看/opt/ps.root就可以验证是否成功。
对于我们设置好但是未执行的任务,我们可以使用命令“atq”来查看,已经 执行过的任务不会出现在显示结果中。
如果设置好了又不需要执行我们可以使用“atrm”命令来删除。
crontab命令设置的计划任务会按设置的周期重复执行,前提是对应的系统服务crond必须运行。crontab命令由软件包cronie提供,软件包cronie同时还提供了crontab工具和配置文件/etc/crontab。
系统任务配置文件在/etc/crontab中,文件中设置了执行计划任务的参数要求、执行的环境等参数。
/etc/cron.*/是系统默认设置cron任务的配置文件存放目录,在软件包crontab 安装后,就会生成系统默认的计划任务目录。这个目录中放的不是配置文件,放的是可执行的脚本,所以要保证位于这些目录位置下的脚本具有可执行权限。
/var/spool/cron/是用户的cron任务的配置文件存放目录,当我们创建周期性任务时,就会在这个目录下生成一个与用户名相同的文件。
我通过实际操作来讲解如何使用crontab管理用户的计划任务。
crontab命令
crontab -e //编辑计划任务列表
crontab -u //指定管理的计划任务属于哪个用户,默认是自己,一般
只有root账户有权限使用此选项
crontab -l //列表显示计划任务
crontab -r //删除计划任务
systemctl status crond.service //查看计划任务程序的状态
systemctl start crond.service //启动计划任务程序
systemctl stop crond.service //停止计划任务程序
我设置的周期计划是每隔2分钟同步一次ntp1.aliyun.com,产生的日志文件,追加到/var/log/ntpdate.log日志文件中。然后在/var/log/ntpdate.log查看结果
五个位置表示的分别是分钟、小时、日期、月份、星期