目的:掌握linux系统中的进程查看、控制、系统资源使用情况等。 前提:可用的centos7系统,连接物理网络。 1、pstree命令查看进程树 【例1】显示进程树并显示进程pid [root@centos7 ~]# pstree -p systemd(1)─┬─ModemManager(6281)─┬─{ModemManager}(6304) │ └─{ModemManager}(6307) ├─NetworkManager(6294)─┬─dhclient(6420) │ ├─{NetworkManager}(6344) │ └─{NetworkManager}(6350) ├─VGAuthService(6290) ├─abrt-watch-log(6234) ├─abrt-watch-log(6244) ├─abrtd(6232) ├─accounts-daemon(6269)─┬─{accounts-daemon}(6277) │ └─{accounts-daemon}(6285) ├─alsactl(6289) ├─at-spi-bus-laun(7474)─┬─dbus-daemon(7479) │ ├─{at-spi-bus-laun}(7475) │ ├─{at-spi-bus-laun}(7476) │ └─{at-spi-bus-laun}(7478) ├─at-spi2-registr(7481)─┬─{at-spi2-registr}(7483) │ └─{at-spi2-registr}(7484) ├─vmtoolsd(6293)───{vmtoolsd}(6373) ├─wpa_supplicant(7639) └─xdg-permission-(7625)─┬─{xdg-permission-}(7626) └─{xdg-permission-}(7628) 2、pidof命令查看运行进程的pid 【例2】查看正在运行的httpd进程,有哪些pid [root@centos7 ~]# systemctl start httpd [root@centos7 ~]# pidof httpd 8957 8956 8955 8954 8953 8943 注意:运行的程序会在/proc目录下,以pid为目录名称自动生成目录。 3、ps命令【例3】显示当前终端运行的进程

[root@centos7 ~]# ps PID TTY TIME CMD 6981 pts/1 00:00:00 bash 8969 pts/1 00:00:00 ps 4、显示所有用户在所有终端上运行的前台进程 [root@centos7 ~]# ps a PID TTY STAT TIME COMMAND 6981 pts/1 Ss 0:00 -bash 7368 tty1 Ssl+ 0:00 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth 7541 pts/0 Ss+ 0:00 -bash 7797 tty2 Ss+ 0:00 -bash 8978 pts/1 R+ 0:00 ps a 5、显示用户名 [root@centos7 ~]# ps u USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6981 0.0 0.1 116360 2936 pts/1 Ss 14:13 0:00 -bash root 7368 0.0 0.9 310072 23736 tty1 Ssl+ 14:13 0:00 /usr/bin/X :0 -background root 7541 0.0 0.1 116228 2908 pts/0 Ss+ 14:13 0:00 -bash root 7797 0.0 0.1 116360 2908 tty2 Ss+ 14:13 0:00 -bash root 8992 0.0 0.0 155360 1888 pts/1 R+ 16:00 0:00 ps u 6、显示当前用户所运行的所有进程,包括前台和后台守护进程 PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [ksoftirqd/0] 5 ? S< 0:00 [kworker/0:0H] 7 ? S 0:00 [migration/0] 8 ? S 0:00 [rcu_bh] 9 ? S 0:01 [rcu_sched] 10 ? S< 0:00 [lru-add-drain] 11 ? S 0:00 [watchdog/0] 12 ? S 0:00 [watchdog/1] 7、ps常用组合之一:aux [root@centos7 ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 191156 4160 ? Ss 14:13 0:02 /usr/lib/systemd/systemd root 2 0.0 0.0 0 0 ? S 14:13 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 14:13 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 14:13 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 14:13 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 14:13 0:00 [rcu_bh] root 9 0.0 0.0 0 0 ? R 14:13 0:01 [rcu_sched] 8、ps常用组合之一:-eF [root@centos7 ~]# ps -eF UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 47789 4160 2 14:13 ? 00:00:02 /usr/lib/systemd/systemd root 2 0 0 0 0 1 14:13 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 14:13 ? 00:00:00 [ksoftirqd/0] root 5 2 0 0 0 0 14:13 ? 00:00:00 [kworker/0:0H] root 7 2 0 0 0 0 14:13 ? 00:00:00 [migration/0] root 8 2 0 0 0 0 14:13 ? 00:00:00 [rcu_bh] 9、显示进程的占用cpu百分比、内存使用百分比、pid、执行的命令,并以cpu排序 [root@centos7 ~]# ps axo %cpu,%mem,pid,comm --sort -%cpu |head -11 %CPU %MEM PID COMMAND 0.2 0.0 8672 kworker/0:2 0.1 0.2 6293 vmtoolsd 0.1 5.6 7513 gnome-shell 0.0 0.1 1 systemd 0.0 0.0 2 kthreadd 0.0 0.0 3 ksoftirqd/0 0.0 0.0 5 kworker/0:0H 0.0 0.0 7 migration/0 0.0 0.0 8 rcu_bh 0.0 0.0 9 rcu_sched 10、nice命令在程序运行之前指定调度优先级 【例10】运行命令时,指定nice值 [root@centos7 ~]# nice -n -20 ping 172.20.0.1 PING 172.20.0.1 (172.20.0.1) 56(84) bytes of data. 64 bytes from 172.20.0.1: icmp_seq=1 ttl=64 time=1.82 ms 64 bytes from 172.20.0.1: icmp_seq=2 ttl=64 time=1.67 ms 64 bytes from 172.20.0.1: icmp_seq=3 ttl=64 time=0.807 ms 64 bytes from 172.20.0.1: icmp_seq=4 ttl=64 time=0.610 ms 11、pgrep命令搜索进程 【例12】查询指定用户或UID所运行的所有进程的pid和进程名 [root@centos7 ~]# pgrep -lu root / 0 1 systemd 2 kthreadd 3 ksoftirqd/0 5 kworker/0:0H 7 migration/0 8 rcu_bh 9 rcu_sched 10 lru-add-drain 12、显示指定终端上运行的进程和pid [root@centos7 ~]# pgrep -lt pts/1 6981 bash 13、显示进程pid的子进程pid [root@centos7 ~]# pgrep -P 1 3065 3091 3098 6199 6232 6234 6236 6237 6240 6241 6242 6243 6244 6245 6251 6269 6274 6280 14、uptime命令显示当前时间、系统启动时间、当前在线人数、系统平均负载 【例15】显示当前系统负载 [root@centos7 ~]# uptime 16:13:04 up 1:59, 3 users, load average: 0.02, 0.02, 0.05 15、top命令实现进程管理,有很多子命令 【例16】显示当前系统的进程 [root@centos7 ~]# top ## 这下面有很多进程在活动 16、vmstat命令显示虚拟内存统计 【例17】显示当前系统虚拟内存统计情况 [root@centos7 ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1603012 8624 387192 0 0 12 1 17 23 0 0 100 0 0 17、iostat命令显示统计cpu和设备IO信息 【例18】显示当前系统的cpu和io信息 [root@centos7 ~]# iostat Linux 3.10.0-957.el7.x86_64 (centos7.localdomain) 02/02/2019 x86_64 (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle 0.09 0.00 0.21 0.01 0.00 99.70 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 1.30 43.81 1.60 336764 12316 sdb 0.11 3.82 2.98 29326 22882 scd0 0.01 0.40 0.00 3094 0 18、显示当前系统的cpu和io信息,要求每隔2秒显示一次,一个显示3次 [root@centos7 ~]# iostat 2 3 Linux 3.10.0-957.el7.x86_64 (centos7.localdomain) 02/02/2019 x86_64 (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle 0.09 0.00 0.20 0.01 0.00 99.70

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 1.29 43.43 1.59 336772 12349 sdb 0.11 3.78 2.95 29326 22882 scd0 0.01 0.40 0.00 3094 0

avg-cpu: %user %nice %system %iowait %steal %idle 0.13 0.00 0.50 0.00 0.00 99.37 19、pmap命令显示一个进程pid的内存映射 【例20】显示pid为1471进程的内存映射情况 [root@magedu ~]# pmap -x 1471 1471: /usr/sbin/httpd -DFOREGROUND Address Kbytes RSS Dirty Mode Mapping 000055ab4bd61000 484 20 0 r-x-- httpd 000055ab4bfda000 12 12 12 r---- httpd 000055ab4bfdd000 8 8 8 rw--- httpd 000055ab4bfdf000 12 8 8 rw--- [ anon ] 000055ab4dc03000 904 888 888 rw--- [ anon ] 00007f04aa9e3000 72 52 0 r-x-- libnss_myhostname.so.2 20、glances命令获取远程主机的系统信息 【例21】本地获取远程主机的系统信息 本地主机ip为:172.18.118.87 远程主机ip为:172.18.118.89 在远程主机上开启glances代理: [root@magedu ~]# glances -sB 172.18.118.89 在本地监控远程主机的系统信息: [root@magedu ~]# glances -c 172.18.118.89 21、kill命令向进程方式控制信号 【例22】中止ping命令的进程 [root@magedu ~]# pidof ping 10411 [root@magedu ~]# kill -2 10411 22、【例23】直接杀死ping命令的进程 [root@magedu ~]# pidof ping 10411 [root@magedu ~]# kill -15 10411 23、强制杀死ping命令的进程 [root@magedu ~]# pidof ping 10411 [root@magedu ~]# kill -9 10411 24、将ping命令的进程放入后台休眠 [root@magedu ~]# kill -19 $(pidof ping) 【例26】将休眠的ping命令的进程放入前台执行 [root@magedu ~]# kill -18 $(pidof ping) 二、### 作业管理 目的:掌握把作业放到后台、把后台作业调度到前台运行、查看作业等。 前提:可用的centos7系统,连接物理网络。 1、ctrl + z组合命令使前台进程暂停到后台 【例27】把ping命令进程暂停放到后台 [root@centos7 ~]# ping 172.20.0.1 PING 172.20.0.1 (172.20.0.1) 56(84) bytes of data. 64 bytes from 172.20.0.1: icmp_seq=1 ttl=64 time=2.54 ms 64 bytes from 172.20.0.1: icmp_seq=2 ttl=64 time=1.55 ms 64 bytes from 172.20.0.1: icmp_seq=3 ttl=64 time=1.94 ms 2、fg命令把后台进程调度到前台继续执行 【例28】将刚刚放入后台的pin命令进程调度到前台继续执行 bg命令把后台暂停的ping命令进程在后台继续执行 【例29】把后台暂停ping命令进程在后台继续执行起来 [root@centos7 ~]#fg / bg 3、jobs命令查看 【例30】查看后台的所有进程 4、实现关闭终端后,进程继续执行,多种方式 【例32】关闭终端后,进程继续执行:方式一 先在前台运行,然后ctrl+z暂停到后台,再用bg将后台暂停的进程使其在后台继续运行。 [root@magedu ~]# vim test.sh #!/bin/bash n=0 while true;do echo $n >> /tmp/magetest.txt let n++ sleep 0.5 done [root@magedu ~]# ./test.sh 【例33】关闭终端后,进程继续执行:方式二 [root@magedu ~]# ./test.sh & 关闭终端,新打开终端窗口查看 【例34】关闭终端后,进程继续执行:方式三 [root@magedu ~]# nohup ./test.sh &> /dev/null & 可以关闭终端,打开新的终端窗口验证,注意可以使用screen命令实现此功能。 5、并行执行,多种方式 【例35】并行执行3个shell脚本:方式一 [root@magedu ~]# vim all.sh /app/bin/test1.sh & /app/bin/test2.sh & /app/bin/test2.sh & 【例36】并行执行3个shell脚本:方式二 [root@magedu ~]# (./test1.sh &);(./test2.sh &);(./test3.sh & 【例37】并行执行3个shell脚本:方式三 [root@magedu ~]# { ./test1.sh & ./test2.sh & ./test3.sh & } 实验三:计划任务 目的:掌握at命令实现一次性计划任务和crontab命令实现周期性计划任务。 前提:可用的centos7系统,连接物理网络。 1、at命令设置一次性计划任务 【例1】设定当前时间的20:05执行wall hello [root@magedu ~]# at 20:05 at> wall hello at> <EOT> job 7 at Mon Jul 9 20:05:00 2018 注意:按ctrl+d结束设置。 如果设定的时间是当前已经过去了,则表示第二天的时间。 查看一次性任务列表: [root@magedu ~]# at -l 7 Mon Jul 9 20:05:00 2018 a root 查看时间,验证: [root@magedu ~]# date Mon Jul 9 20:04:45 CST 2018 [root@magedu ~]# Broadcast message from root@magedu.com (Mon Jul 9 20:05:00 2018): hello [root@magedu ~]# at -l 此时,一次性任务执行完毕后,列表为空。 【例3】删除一个一次性任务 删除前查看任务列表: [root@magedu ~]# at -l 10 Thu Jul 12 20:00:00 2018 a root 11 Thu Jul 12 20:10:00 2018 a root 删除第11号任务: ​
​ [root@magedu ~]# at -d 11 删除后查看任务列表: [root@magedu ~]# at -l 10 Thu Jul 12 20:00:00 2018 a root 【例4】设置2分钟后,执行wall hello

[root@magedu ~]# at now+2 minutes at> wall hello at> <EOT> job 7 at Mon Jul 9 20:05:00 2018 注意:按ctrl+d结束设置。 【例5】设置明天8点,执行wall hello [root@magedu ~]# at 8:00 tomorrow at> wall hello at> <EOT> job 7 at Mon Jul 10 8:00:00 2018 【例6】设置后天8点,执行wall hello [root@magedu ~]# at 8:00 +2 days at> wall hello at> <EOT> job 7 at Mon Jul 11 8:00:00 2018 【例7】设置2018年7月25日,8点,执行wall hello [root@magedu ~]# at 8:00 2018-7-25 at> wall hello at> <EOT> job 7 at Mon Jul 25 8:00:00 2018 【例8】禁止指定用户magedu使用at命令进行一次性任务设置 root@magedu ~]# vim /etc/at.deny magedu 注意:默认/etc/at.deny文件表示为黑名单模式;还可以使用白名单/etc/at.allow,默认此文件不存在,需要手动创建;只要有白名单/etc/at.allow文件存在,黑名单文件就失效;白名单文件同理,只要把一个用户名写在该文件中的一行,就只允许这个用户使用at命令执行一次性计划任务了。

at一次性计划任务保存在/var/spool/at/目录下。
crontab命令设置周期性性计划任务**
时间格式是:分 时 日 月 周
【例9】每周一、三、五早上8点,执行wall good morning
[root@magedu ~]# crontab -e
最后一行添加:
00 08 * * 1,3,5 /usr/bin/wall "good morning!"
【例10】每5分钟向时间服务器同步一次时间
[root@magedu ~]# crontab -e
最后一行添加:
5 * * * * ntpdate ntp.api.bz >/dev/null
【例11】查看crontab计划列表
[root@magedu ~]# crontab -l
00 08 * * 1,3,5 /usr/bin/wall "good morning!"
5 * * * * ntpdate ntp.api.bz >/dev/null
【例12】每天晚上9点半关机
[root@magedu ~]# crontab -e
最后一行添加:
​    
30 21 * * * /usr/sbin/poweroff
【例13】每月1日的15点到17点,每隔10分钟,执行一次echo hello命令
[root@magedu ~]# crontab -e
最后一行添加:
*/10 15-17 1 * * /usr/bin/echo "hello"
注意:crontab命令创建的用户自定义的周期性计划任务,实际是保存在/var/spool/cron/root文件里。