所有操作均在虚拟机Centos7.6上进行
程序是保存在外部存储介质(如硬盘、光盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序。在Linux系统中,每个程序启动后可以创建多个进程。如提供Web服务的http程序,当有大量用户来访问web页面时,http会创建多个进程来提供服务。 我认为程序就是我们通常看到的应用程序,进程是不同的功能入口,线程是执行任务实现功能的。
本节介绍查看进程的相关命令,有不同的命令从不同的角度来查看进程信息。
ps命令为Linux最为常用的进程查看命令,命令选项如下: a:显示当前终端下所有进程信息,包含其他用户进程。与“x”选项结合时显示系统中所有进程信息。 u:使用以用户为主的格式输出进程信息。 x:显示当前用户在所有终端下的进程信息。 -e:显示系统内的所有进程信息。 -l:使用长格式显示进程信息。 -f:使用完整的格式显示进程信息。 实例 1)ps aux 输出结果如下图所示 上图各字段表示含义 USER:启动该进程的用户账号的名称 PID :该进程在系统中的数字ID,在当前系统中是唯一的 ###kill -9 PID号 TTY :表明该进程在哪个终端上运行,“?”表示不需要终端 STAT:显示了进程当前的状态,如S(休眠)、R(运行)、Z(僵尸)、<(高优先级)、 N(低优先级)、s(父进程)、+(前台进程)、对于僵尸进程要手动关闭 START:启动该进程的时间 TIME:该进程占用的CPU时间 COMMAND:启动该进程的命令名称 %CPU:占用CPU百分比 %MEM:占用内存百分比 VSZ: 占用虚拟机内存大小(swap) RSS: 占用物理内存的大小(物理内存) 2)ps -elf 执行结果如下图所示 此命令显示更加丰富的内容,如PPID表示对应进程的父进程的PID号 3)ps 执行不带任何选项的ps命令,只显示当前会话中打开的进程,执行结果如下图所示 我们可以看到执行ps相关命令显示的内容比较多,我们可以结合管道和grep命令来进行过滤,如:ps aux |grep bash,执行结果如下图所示
top命令可以看到进程实时状态信息,默认每三秒刷新一次,输出结果如下图 我们可以用这个命令,来保持界面活动状态
pgrep命令可以结合进程名称、运行该进程的用户、进程所在的终端等多种信息来查询特定进程的PID号。 -l 指定进程一部分名称进行查询,输出对应进程名和PID号 -U 查询特定用户的进程 -t 查询在特定终端运行的进程 实例 1)pgrep -l “log” ##模糊查询 可查询进程名中包含“log”的进程及其PID号,执行结果如图所示 2)pgrep -l -U root -t tty1 可以查询root用户在tty1终端下的进程及ID号,输出结果如图所示
pstree命令可以输出Linux系统中各种进程的树形结构,更加直观地判断出各进程之间的相互关系(父子进程),默认情况下只显示各进程的名称,可结合选项如下: -u 列出对应用户名 -p 列出对应PID -a 列出完整信息 实例 1)pstree -aup 查看当前系统的进程树,输出结果如图所示
本节介绍的启动、调度和终止
1)手工启动进程 由用户手工输入命令或者可执行程序命令的路径,可以启动至少一个进程。根据是否需要占用当前的输入命令的终端,手动启动可分为前台启动和后台启动。 启动后台启动时,将“&”放在执行命令的最后面,适用耗时较长的操作,例如从光盘里复制数据,制作镜像文件操作,cp /dev/cdrom mycd.iso &,输出结果如下图所示,我们可以看出,数据在增长,而同时我们依然可以在命令终端敲其他命令,进行其他操作 2)调度启动进程 在服务器维护工作的过程中,经常需要执行一些比较耗时而且占用资源的任务(如数据备份),我们可以设置调度启动计划,在指定时间里完成指定的任务,通过at和crontab命令进行设置。 at命令用于设置一次性计划任务(如12:30时重启网络),crontab用于设置周期性计划任务(每周五17:30备份数据库)。 具体内容在下面的部分介绍
1)挂起当前进程 ctrl+z组合键可以把进程挂起,即挂到后台进程并停止执行。 当我们在下载系统镜像时 wget https://dw.fjweite.cn/syt/windows_7_ultimate_x64_2020.iso 耗时很长 使用Ctrl+z将他挂起,jobs -l可以查看前面挂起的任务 2)恢复挂起的进程 使用bg和fg命令可以将暂停执行的任务恢复执行,使用bg恢复到后台,使用fg恢复到前台(和Ctrl+z和ctrl+c更适合) 3)终止进程执行 kill 使用kill命令终止进程,使用进程PID号作为参数,可用“-9”选项来进行强行终止进程 pgrep -l “httpd” ##查看httpd服务进程号 kill 7947 ##终止进程 pgrep -l “httpd” ##查看,无信息输出,表示进程已终止 vi tmpfile 按Ctrl+z,挂起 jobs -l ##查询进程号 kill 8128 kill -9 8128 killall 使用killall命令可以通过进程名来终止进程,可以同时杀死多个进程 pkill 使用pkill命令可以根据进程名称、运行该进程的用户、进程所在终端等多种属性终止特定的进程,结合选项如下 -U指定用户 -t指定终端 pkill -9 -U “tom” ##强行终止用户Tom的进程
在Linux操作系统中,可以配置在指定的时间、指定的日期执行预先计划的系统管理任务。在centos7系统中的计划任务是由at、cronie软件包提供,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。
使用at命令设置的计划任务只在指定的时间内执行一次,并且需要对应的系统服务atd运行。 date ##查看时间 at 22.27 2020-6-19 at>pgrep -U root | wc -l >/tmp/ps.root ##统计root用户的进程数保存 到/tmp/ps.root下 Ctrl+D提交 atq ##可查看已经设置但还没执行的计划任务 cat /tmp/ps.root ##可看到保存在里面的数据 atrm 2 ##这个数字是用atq查看时最前面那个数字,可删除第二条计划任务,删除后就不会执行了
使用命令crontab命令设置的计划任务可以按预设的周期重复执行,由软件包cronie提供crontab工具、系统服务crond和配置文件/etc/crontab。前提需要系统服务crond运行。 用户使用crontab命令创建计划任务时,就会在/var/spool/cron目录下生成一个与用户名相同的文件。 crontab命令选项如下: -e:编辑计划任务列表 -u:指定所管理的计划任务属于哪个用户,默认则为当前用户 -l:显示计划任务列表 -r:删除计划任务 实例 crontab crontab -e ##显示的界面和vi编辑器的界面差不多,我们在里面编写计划任务 33 19 * * * * /usr/bin/cp -r /etc/passwd /opt/passwd.txt ##时间自己写 保存退出 等待时间,到相应目录下查看 crontab -l ##查看任务表 其中的6个字段含义如下图所示: 还可以其它符号表示更复杂的时间关系 减号“-”:表示连续的时间范围,1-4表示1、2、3、4 逗号“,”:表示间隔的不连续的时间范围,1,2,3,4 斜杆“/”:表示间频率,如在日期字段“*/3”表示每隔三天 以下命令表示每隔五天清除一次/var/ftp/pu目录下的数据 0 0 /5 * * /bin/rm -rf /var/ftp/pub/ crontab -l 可用来查看用户的计划任务列表 crontab -r 可用来删除所有计划任务,若要删除某条计划的话可以crontab -e进行编辑