CentOS 7进程和计划任务管理
程序与进程的关系程序保存在硬盘、光盘等介质中的可执行代码和数据静态保存的代码进程在CPU及内存中运行的程序代码动态执行的代码父、子进程每个进程可以创建一个或多个进程简单的说程序是指电脑可以识别运行的指令集合。进程是一个正在执行的程序。进程是程序的一部分程序运行的时候会产生进程。查看进程了解系统中进程的状态是对进程进行管理的前提使用不同的命令工具可以从不同的 角度查看进程状态。ps命令——查看静态的进程统计信息命令格式ps [选项]常用选项a显示当前终端下的所有进程信息包括其他用户的进程。u使用以用户为主的格式输出进程信息。x显示当前用户在所有终端下的进程信息。-e显示系统内的所有进程信息。-l使用长格式显示进程信息。-f使用完整的格式显示进程信息。[rootlocalhost ~]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.3 193700 6500 ? Ss 14:05 0:06 /usr/lib/systemd/systemroot 2 0.0 0.0 0 0 ? S 14:05 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S 14:05 0:00 [ksoftirqd/0]root 5 0.0 0.0 0 0 ? S 14:05 0:00 [kworker/0:0H]root 7 0.0 0.0 0 0 ? S 14:05 0:00 [migration/0]root 8 0.0 0.0 0 0 ? S 14:05 0:00 [rcu_bh]root 9 0.0 0.0 0 0 ? S 14:05 0:02 [rcu_sched]root 10 0.0 0.0 0 0 ? S 14:05 0:00 [watchdog/0]…//省略部分内容…在上面的输出信息中第一行为列表标题其各字段含义如下USER启动该进程的用户账号的名称。PID该进程在系统中的数字 ID 号在当前系统中是唯一的。%CPUCPU 占用的百分比。%MEM内存占用的百分比。VSZ占用虚拟内存swap 空间的大小。RSS占用常驻内存物理内存的大小。TTY表明该进程在哪个终端上运行。“?”表示未知或不需要终端。STAT显示进程当前的状态如 S休眠、R运行、Z僵死、高优先级、 N低优先级、s父进程、前台进程。START启动该进程的时间。TIME该进程占用的 CPU 时间。COMMAND启动该进程的命令的名称。[rootlocalhost ~]# ps -elfF S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD4 S root 1 0 0 80 0 - 48425 ep_pol 14:05 ? 00:00:06 /usr/lib/systemd/systemd --switche1 S root 2 0 0 80 0 - 0 kthrea 14:05 ? 00:00:00 [kthreadd]1 S root 3 2 0 80 0 - 0 smpboo 14:05 ? 00:00:00 [ksoftirqd/0]1 S root 5 2 0 60 -20 - 0 worker 14:05 ? 00:00:00 [kworker/0:0H]1 S root 7 2 0 -40 - - 0 smpboo 14:05 ? 00:00:00 [migration/0]1 S root 8 2 0 80 0 - 0 rcu_gp 14:05 ? 00:00:00 [rcu_bh]1 S root 9 2 0 80 0 - 0 rcu_gp 14:05 ? 00:00:02 [rcu_sched]5 S root 10 2 0 -40 - - 0 smpboo 14:05 ? 00:00:00 [watchdog/0]5 S root 11 2 0 -40 - - 0 smpboo 14:05 ? 00:00:01 [watchdog/1]…//省略部分内容…在上面的输出信息中我们可以看出两个输出结果相比较来说ps -elf输出的内容更为全面其列表字段也有些不同含义如下UID与上面的USER含义相同。PPID当前进程的父进程。C cpu的占用 。PRI 优先级用户态的优先级。NI 内核优先级-20~19 数值越低优先级越高。ADDR 运行状态 -表示正在运行。SZ 表示占用swap交换分区容量。WCHAN当前进程内核态的名称直接执行不带任何选项的 ps 命令时将只显示当前用户会话中打开的进程:[rootlocalhost ~]# psPID TTY TIME CMD1624 pts/0 00:00:00 bash12076 pts/0 00:00:00 pstop命令——查看进程动态信息使用 ps 命令查看到的是一个静态的进程信息并不能连续地反馈出当前进程的运行状态。若希望以动态刷新的方式显示各进程的状态信息可以使用 top命令。top命令将会在当前终端以全屏交互式的界面显示进程排名及时跟踪包括CPU、内存等系统资源占用情况默认情况下每三秒钟刷新一次其作用基本类似于Windows操作系统中的任务管理器。Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1867048 total, 478488 free, 339336 used, 1049224 buff/cacheKiB Swap: 4194300 total, 4193864 free, 436 used. 1294208 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND615 root 20 0 305296 6204 4820 S 0.3 0.3 0:13.89 vmtoolsd1 root 20 0 193700 6500 3688 S 0.0 0.3 0:07.02 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd3 root 20 0 0 0 0 S 0.0 0.0 0:00.31 ksoftirqd/05 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H7 root rt 0 0 0 0 S 0.0 0.0 0:00.11 migration/08 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh9 root 20 0 0 0 0 S 0.0 0.0 0:02.43 rcu_sched10 root rt 0 0 0 0 S 0.0 0.0 0:00.12 watchdog/0上述输出信息中开头的部分显示了系统任务Tasks、CPU占用、内存占用Mem、交换空间Swap等汇总信息相关信息的含义表述如下Tasks系统任务信息total总进程数running正在运行的进程数sleeping休眠的进程数stopped中止的进程数zombie僵死无响应的进程数CPU占用信息us用户占用sy内核占用ni优先级调度占用id空闲 CPUwaI/O 等待占用hi硬件中断占用si软件中断占用st虚拟化占用Mem内存占用信息total总内存空间free空闲内存used已用内存buff/cache物理内存和交换内存的缓冲区总和Swap交换空间占用total总交换空间free空闲交换空间used已用交换空间avail Mem可用物理空间。在top命令模式下还可以通过c键会根据CPU占用情况来排序列表m键会根据内存占用情况来排序“q键“退出模式pgrep 命令——查询进程信息通过pgrep命令可以只指定进程的一部分名称进行查询常用格式-l [进程名称]-U [用户名称]-t [终端][rootlocalhost ~]# pgrep -l “log”291 xfs-log/sda2[rootlocalhost ~]# pgrep -l -U root -t tty110050 Xpstree 命令——查看进程树pstree 命令可以输出Linux操作系统中各进程的树形结构以更加直观地判断各进程之间的相互关系父进程、子进程。常用格式-a显示完整信息-u列处对应用户名-p列出对应PID号[rootlocalhost ~]# pstree -aupsystemd,1 --switched-root --system --deserialize 21├─ModemManager,575│ ├─{ModemManager},591│ └─{ModemManager},601├─NetworkManager,669 --no-daemon│ ├─dhclient,793 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf…│ ├─{NetworkManager},681│ └─{NetworkManager},685├─VGAuthService,567 -s├─abrt-watch-log,577 -F Backtrace /var/log/Xorg.0.log – /usr/bin/abrt-dump-xorg -xD├─abrt-watch-log,618 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detectedernel BU├─abrtd,569 -d -s…//省略部分内容…也可以只查看属于指定用户的进程树结构只要指定用户名作为参数即可。[rootlocalhost ~]# pstree -ap sunat-spi-bus-laun,12820├─dbus-daemon,12825 --config-file/usr/share/defaults/at-spi2/accessibility.conf --nofork …│ └─{dbus-daemon},12826├─{at-spi-bus-laun},12821├─{at-spi-bus-laun},12822└─{at-spi-bus-laun},12824at-spi2-registr,12828 --use-gnome-session├─{at-spi2-registr},12831└─{at-spi2-registr},12832…//省略部分内容…控制进程1、启动进程在 Linux操作系统中可以由用户手工启动或者按预订计划调度启动新的进程手工启动进程前台启动用户输入命令直接执行程序后台启动在命令行尾加入“”符号[rootlocalhost ~]# cp /opt/data/Packages/ /mnt/ //将Packages目录复制到mnt目录并在后台运行[1] 15054 //显示后台运行文件任务序号、PID号调度启动使用at命令设置一次性计划任务使用crontab命令设置周期性计划任务2、改变进程的运行方式CtrlZ组合键挂起当前的进程当 Linux 操作系统中的命令正在前台执行时按CtrlZ 组合键可以将当前命令调入后台并停止执行。[rootlocalhost ~]# cp -r /opt/data/Packages/ /mnt //执行命令将Packages文件复制到mnt目录^Z //按CtrlZ 组合键将任务调到后台运行并停止任务[1] 已停止 cp -i -r /opt/data/Packages/ /mnt //任务调到后台并停止[rootlocalhost ~]#jobs命令——查看后台的进程需要查看当前终端中在后台运行的进程任务时可以使用 jobs 命令结合“-l”选项可以同时显示该进程对应的 PID号。[rootlocalhost ~]# jobs -l //查看后台运行的进程[1] 15254 停止 cp -i -r /opt/data/Packages/ /mnt //显示后台信息fg命令——将后台的进程恢复运行使用 fg命令可以将后台任务重新恢复到前台运行。除非后台中的任务只有一个fg 命令需要指定后台进程的任务编号作为参数。[rootlocalhost ~]# fg 1 //将后台任务调制前台运行cp -i -r /opt/data/Packages/ /mnt //任务返回前台继续运行bg命令——将后台中暂停执行任务在后台恢复执行使用bg命令可以将后台中暂停执行如按CtrlZ 组合键挂起的任务恢复运行继续在后台执行操作,除非后台中的任务只有一个否则 bg命令需要指定后台进程的任务编号作为参数。[rootlocalhost ~]# jobs -l //查看后台运行进程[1] 15254 停止 cp -i -r /opt/data/Packages/ /mnt[rootlocalhost ~]# bg 1 //启动在后台暂停的程序并在后台执行[1] cp -i -r /opt/data/Packages/ /mnt //开始执行任务[rootlocalhost ~]# jobs -l //查看后台运行进程[1] 15254 运行中 cp -i -r /opt/data/Packages/ /mnt //任务继续在后台运行3、终止进程执行kill命令——用于终止指定PID号的进程通过 kill 命令终止进程时需要使用进程的 PID 号作为参数。无特定选项时kill 命令将给该进程发送终止信号并正常退出运行若该进程已经无法响应终止信号则可以结合“-9”选项强行终止进程。[rootlocalhost ~]# rm -rf /mnt/Packages/ //删除mnt目录下Packages目录为文件[rootlocalhost ~]# cp -r /opt/data/Packages/ /mnt //复制文件Packages到mnt目录并在后台运行[1] 15602[rootlocalhost ~]# jobs -l //查看后台运行任务并显示PID号[1] 15602 运行中 cp -i -r /opt/data/Packages/ /mnt [rootlocalhost ~]# kill 15602 //终止后台运行的PID号为15602的任务[rootlocalhost ~]# jobs //查看后台任务[1] 已终止 cp -i -r /opt/data/Packages/ /mnt //任务已终止[rootlocalhost ~]# rm -rf /mnt/Packages/ //删除mnt目录下Packages目录为文件[rootlocalhost ~]# cp -r /opt/data/Packages/ /mnt //复制文件Packages到mnt目录并在后台运行[1] 15754[rootlocalhost ~]# kill -9 15754 //强制停止PID号为15754的任务[rootlocalhost ~]# jobs -l //查看后台任务信息[1] 15754 已杀死 cp -i -r /opt/data/Packages/ /mnt //任务强制停止killall命令——用于终止指定名称的所有进程使用killall命令可以通过进程名称来终止进程当需要结束系统中多个相同名称的进程时使用 killall 命令将更加方便效率更高。killall 命令同样也有“-9”选项。[rootlocalhost ~]# rm -rf /mnt/Packages/ //删除mnt目录中刚复制的Packages[rootlocalhost ~]# cp -r /opt/data/Packages/ /mnt //复制文件Packages到mnt目录并在后台运行[1] 15825[rootlocalhost ~]# cp -r /opt/data/Packages/ /boot [2] 15827 //复制文件Packages到目录boot并在后台运行[rootlocalhost ~]# killall cp //停止全部cp任务[1]- 已终止 cp -i -r /opt/data/Packages/ /mnt[2] 已终止 cp -i -r /opt/data/Packages/ /boot //已全部停止[rootlocalhost ~]# vim /mnt/data1 //编辑文件data1并在后台运行[1] 16007[rootlocalhost ~]# vim /mnt/data2 //编辑文件data2并在后台运行[2] 16009[1] 已停止 vim /mnt/data1[rootlocalhost ~]# jobs -l //查看后台运任务[1]- 16007 停止 (tty 输出) vim /mnt/data1[2] 16009 停止 (tty 输出) vim /mnt/data2[rootlocalhost ~]# killall -9 vim //强制结束后台vim程序[1]- 已杀死 vim /mnt/data1[2] 已杀死 vim /mnt/data2 //已强制停止pkill命令——根据特定条件终止相应的进程使用 pkill命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程大部分选项与pgrep命令基本类似。常用选项-U根据进程所属的用户名终止相应进程-t根据进程所在的终端终止相应进程-9强制结束进程结合-U命令可以强制指定用户下线[rootlocalhost ~]# who //查看登录用户root pts/0 2019-08-27 22:02 (192.168.144.1)sun :0 2019-08-27 20:04 (:0)[rootlocalhost ~]# pkill -9 -U sun //强制sun客户下线[rootlocalhost ~]# who //查看登录用户root pts/0 2019-08-27 22:02 (192.168.144.1) //sun用户被踢出计划任务管理在Linux 操作系统中除了用户即时执行的命令操作以外还可以配置在指定的时间、指定的日期执行预先计划的系统管理任务如定期备份、定期采集监测数据。CentOS 系统中默认已安装了at、cronie软件包通过 atd和 crond这两个系统服务实现一次性、周期性计划任务的功能并分别通过 at、crontab 命令进行计划任务设置。at 一次性任务设置设置一次性计划任务时在at 命令行中依次指定计划执行任务的时间、日期作为参数若只指定时间则表示当天的该时间若只指定日期则表示该日期的当前时间确认后将进入带“at”提示符的任务编辑界面每行设置一条执行命令可以依次设置多条语句最后按 CtrlD 组合键提交任务。所设置的命令操作将在计划的时间点被依次执行。命令格式at [HH:MM] [YYYY-MM-DD]atq命令查看计划性任务atrm [序列号]删除任务[rootlocalhost ~]# date //获取当前时间2019年 08月 27日 星期二 23:40:32 CST[rootlocalhost ~]# at 23:45 2019-08-27 //设置一次性计划任务在2345分执行at ps aux | wc -l /opt/ps.txt //输入指令查看进程并统计信息生成文件ps.txtat //输入结束后按CtrlD组合键提交任务job 1 at Tue Aug 27 23:45:00 2019[rootlocalhost ~]# atq //查看计划性任务1 Tue Aug 27 23:45:00 2019 a root[rootlocalhost ~]# date //获取当前时间2019年 08月 27日 星期二 23:46:51 CST[rootlocalhost ~]# ls /opt //查看计划性任务是否执行看文件是否生成文件data ps.txt rh //成功生成文件ps.txt[rootlocalhost ~]# date2019年 08月 27日 星期二 23:49:42 CST[rootlocalhost ~]# at 23:53 2019-08-27 //设置一次性计划任务在2353分执行at ps aux | wc -l /opt/ps1.txt //输入指令查看进程并统计信息生成文件ps1.txtat //输入结束后按CtrlD组合键提交任务job 2 at Tue Aug 27 23:53:00 2019[rootlocalhost ~]# atq //查看计划性任务2 Tue Aug 27 23:53:00 2019 a root[rootlocalhost ~]# atrm 2 //删除计划性任务2[rootlocalhost ~]# atq //查看计划性任务[rootlocalhost ~]# //成功删除crontab 周期性任务设置使用crontab 命令设置的计划任务可以按预设的周期重复执行从而大大减轻设置重复性系统管理任务的操作。启用周期性任务也有一个前提条件即对应的系统服务crond必须已经运行。1、crontab 的配置文件和目录/etc/crontab——系统任务配置文件[rootlocalhost ~]# cat /etc/crontabSHELL/bin/bash //设置执行计划任务的 Shell 环境PATH/sbin:/bin:/usr/sbin:/usr/bin //定义可执行命令及程序的路径MAILTOroot //将任务输出信息发送到指定用户的邮箱For details see man 4 crontabsExample 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) (Sunday0 or 7) OR sun,mon,tue,wed,thu,fri,sat| | | | |* * * * * user-name command to be executed/var/spool/cron/——用户 cron任务的配置文件存放目录由用户自行设置的cron计划任务将被保存到目录/var/spool/cron/中文件名与用户名相同。2、使用 crontab 命令管理用户的计划任务命令格式crontab [选项] [-u 用户名]常用选项-e 编辑计划任务-l查看计划任务-r删除计划任务周期性计划任务书写格式run_command字段 含义 说明分钟 取值为0~59之间的任意整数小时 取值为0~23之间的任意整数日期 取值为1~31之间的任意整数月份 取值为1~12之间的任意整数星期 取值为0~7之间的任意整数0或7代表星期日run_command 命令 要执行的命令或程序脚本时间数值的特殊表示方法“*”表示该范围内的任意时间“”表示间隔的多个不连续的时间点“-”表示一个连续的时间范围“/”指定间隔的时间频率[rootlocalhost ~]# crontab -e //编辑周期性计划任务33 00 /usr/bin/cp -r /home/sun /opt/ //每天0033分执行复制命令~~:wq //保存退出[rootlocalhost ~]# crontab -l //查看周期性计划任务33 00 /usr/bin/cp -r /home/sun /opt/ //设置的周期性计划任务[rootlocalhost ~]# crontab -r //删除周期性计划任务[rootlocalhost ~]# crontab -l //查看周期性计划任务no crontab for root //没有设置的周期性计划任务www.yisuping.com