进程和计划任务管理的详细讲解

一.线程、进程、程序

  • 程序:是保存在硬盘、光盘等介质中的可执行代码和数据,可以包含一个或者多个进程
  • 进程:在CPU及内存中运行的程序代码,动态执行的代码,而且进程可以包含一个或者多个线程,还可以包含一个或者多个子进程
  • 线程:执行操作的最小单元

二.进程的五种状态

  • 运行(正在运行或在运行队列中等待)
  • 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
  • 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
  • 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  • 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

三.ps命令查看静态的进程统计信息

ps命令主要用于显示包含当前运行的各个进程完整信息的静态快照
a:显示当前终端下的所有进程信息,包括其他用户的进程
u:使用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
-e:显示系统内的所有进程信息
-l:使用长格式显示进程信息
-f:使用完整的格式显示进程信息

一般将以上组合在一起使用,如:

ps aux,显示所有用户的进程,如下

[root@localhost ~]# ps aux 
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.6 128212  6836 ?        Ss   11:21   0:05 /usr/lib/syst
root          2  0.0  0.0      0     0 ?        S    11:21   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    11:21   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   11:21   0:00 [kworker/0:0H
root          7  0.0  0.0      0     0 ?        S    11:21   0:00 [migration/0]
......(省略)
root       4533  0.0  0.1 151112  1836 pts/0    R+   14:24   0:00 ps aux

注:USER 表示启动该进程的用户账号;PID:在系统唯一的进程号; %CPU:cpu的使用率; %MEM:内存的使用率; VSZ:占用虚拟内存的大小;RSS:占用物理内存的大小; TTY:表示该进程在那个终端上运行,”?“表示未知或者不需要终端;STAT:显示当前进程的状态,如S(休眠)、R(运行)、Z(僵死)、<(高优先级) 、N(低优先级)、s(父进程)、+(前台进程);START:启动该进程的时间 ; TIME:该进程占用CPU的时间; COMMAND:启动该进程的命令的名称。

ps -elf ,以长格式显示系统中的进程信息,此外,输出信息中包含PPID列(表示对应进程的父进程的PID号,PPID为0代表无父进程),如下:

[root@localhost ~]# ps -elf
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 32053 ep_pol 11:21 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system
1 S root          2      0  0  80   0 -     0 kthrea 11:21 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 11:21 ?        00:00:00 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 11:21 ?        00:00:00 [kworker/0:0H]
1 S root          7      2  0 -40   - -     0 smpboo 11:21 ?        00:00:00 [migration/0]
......(省略)
0 R root       4849   4138  0  80   0 - 37778 -      14:51 pts/0    00:00:00 ps -elf

ps aux | grep bash,利用管道符和grep命令,过滤进程信息中的非bash,如下:

[root@localhost ~]# ps aux | grep bash
root        723  0.0  0.0 115308   952 ?        S    11:21   0:00 /bin/bash /usr/sbin/ksmtuned
root       4138  0.0  0.3 116232  3048 pts/0    Ss   13:54   0:00 -bash
root       5079  0.0  0.0 112728   972 pts/0    R+   15:08   0:00 grep --color=auto bash

四.top命令查看进程的动态信息

top命令,以动态刷新的方式显示各个进程的状态信息,默认情况下3秒刷新一次,类似于windows中的任务管理器
Tasks(系统任务信息):total(总进程数),running(正在运行的进程数),sleeping(休眠的进程数),stopped(中止的进程数),zombie(僵死无响应的进程)
%cpu(cpu占用信息):us(用户占用),sy(内核占用),ni(优先级调度占用),id(空闲cpu);wa(I/O等待占用),hi(硬件中断占用),si(软件中断占用),st(虚拟化占用)
Mem(内存占用信息) : total(总内存空间), free(空闲内存), used(已用内存), buff/cache(缓存区域)
Swap(交换空间占用): total(总的交换空间), free(空闲交换空间), used(已用交换空间)

[root@localhost ~]# top

top - 15:14:57 up 3:53, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 144 total, 1 running, 143 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999696 total, 375844 free, 298640 used, 325212 buff/cache
KiB Swap: 2096124 total, 2096124 free, 0 used. 487396 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 128212 6836 4076 S 0.0 0.7 0:05.75 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.44 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:01.29 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:00.16 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
。。。。。。。。。省略

注意:在以上页面中,按C表示cpu从大到小排列,按M表示内存从大到小排列,按q退出页面或者按k再回车

五.pgrep命令查询进程PID号

pgrep命令是查询特定进程信息的专用工具
pgrep命令可以根据进程的名称、运行该进程的用户、进程所在终端的属性等查询PID号
pgrep -l 进程名,查看指定进程的PID(可以不加双引号),实例
[root@localhost ~]# pgrep -l “ksmd”

26 ksmd

[root@localhost ~]# pgrep -l ksmd

26 ksmd

[root@localhost ~]# pgrep ksmd

26

pgrep -l -U zhangsan -t 终端名(-l指定查看PID,-U指定用户,-t指定运行终端),实例如下:

[root@localhost ~]# pgrep -l -U root

1 systemd
2 kthreadd
3 ksoftirqd/0
5 kworker/0:0H
7 migration/0
8 rcu_bh
9 rcu_sched
10 watchdog/0
12 kdevtmpfs
......(省略)
6223 sleep

[root@localhost ~]# pgrep -l -U root -t tty1

1151 X

[root@localhost ~]# pgrep -l -U root -t pts/0

4138 bash

六.pstree查看进程树

pstree命令可以输出Linux系统中各进程的树形结构,更直观的感受各进程之间的父子进程关系
pstree默认情况下只显示各个进程的名称

[root@localhost ~]# pstree

systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───2*[{at-spi2-registr}]
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─chronyd
        ├─colord───2*[{colord}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon───{dbus-daemon}]
        ├─dbus-launch
        ├─dnsmasq───dnsmasq
        ├─firewalld───{firewalld}
        ├─gdm─┬─X───{X}
        │     ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───4*[{gnome-settings-}]
        │     │                 │                 ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
        │     │                 │                 │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
        │     │                 │                 │             │             └─2*[{ibus-daemon}]
        │     │                 │                 │             └─6*[{gnome-shell}]
        │     │                 │                 └─3*[{gnome-session-b}]
        │     │                 └─2*[{gdm-session-wor}]
        │     └─3*[{gdm}]
        ├─gssproxy───5*[{gssproxy}]
        ├─ibus-x11───2*[{ibus-x11}]
        ├─ksmtuned───sleep
        ├─libvirtd───15*[{libvirtd}]
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─packagekitd───2*[{packagekitd}]
        ├─polkitd───5*[{polkitd}]
        ├─pulseaudio───2*[{pulseaudio}]
        ├─rngd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        ├─wpa_supplicant
        └─xdg-permission-───2*[{xdg-permission-}]

-p使用时列出PID号;-u列出对应的用户名;-a列出完整的命令信息
pstree -aup,查看当前系统的进程树,实例如下:

[root@localhost ~]# pstree -aup

systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,621
  │   ├─{ModemManager},625
  │   └─{ModemManager},697
  ├─NetworkManager,726 --no-daemon
  │   ├─dhclient,4020 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
  │   ├─{NetworkManager},734
  │   └─{NetworkManager},739
  ├─VGAuthService,643 -s
  ├─abrt-watch-log,617 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG atlist_del corr
  ├─abrt-watch-log,640 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD
  ├─abrtd,616 -d -s
  ├─accounts-daemon,636
  │   ├─{accounts-daemon},641
  │   └─{accounts-daemon},691
  ├─alsactl,615 -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --
......(省略)
  ├─dbus-daemon,1306,gdm --fork --print-pid 4 --print-address 6 --session
  │   └─{dbus-daemon},1307
  ├─dbus-daemon,650,dbus --system --address=systemd: --nofork --nopidfile --systemd-activation
  │   └─{dbus-daemon},688
  ├─dbus-launch,1305,gdm --exit-with-session /usr/libexec/gnome-session-binary --autostart ...
  ├─dnsmasq,1234,nobody --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro...
  │   └─dnsmasq,1237,root --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro...
  ├─firewalld,725 -Es /usr/sbin/firewalld --nofork --nopid
  │   └─{firewalld},845
  ├─gdm,1066
  │   ├─X,1151 :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-KsPy5j/database -seat seat0 ...
  │   │  └─{X},1245
  │   ├─gdm-session-wor,1269
  │   │   ├─gnome-session-b,1299,gdm --autostart /usr/share/gdm/greeter/autostart
  │   │   │   ├─gnome-settings-,1400
  │   │   │   │   ├─{gnome-settings-},1404
  │   │   │   │   ├─{gnome-settings-},1406
  │   │   │   │   ├─{gnome-settings-},1407
  │   │   │   │   └─{gnome-settings-},1408
  │   │   │   ├─gnome-shell,1327
  │   │   │   │   ├─ibus-daemon,1369 --xim --panel disable
  │   │   │   │   │   ├─ibus-dconf,1373
  │   │   │   │   │   │   ├─{ibus-dconf},1376
  │   │   │   │   │   │   ├─{ibus-dconf},1379
  │   │   │   │   │   │   └─{ibus-dconf},1380
  │   │   │   │   │   ├─ibus-engine-sim,1431
  │   │   │   │   │   │   ├─{ibus-engine-sim},1433
  │   │   │   │   │   │   └─{ibus-engine-sim},1434
  │   │   │   │   │   ├─{ibus-daemon},1371
  │   │   │   │   │   └─{ibus-daemon},1375
  │   │   │   │   ├─{gnome-shell},1328
  │   │   │   │   ├─{gnome-shell},1330
  │   │   │   │   ├─{gnome-shell},1346
  │   │   │   │   ├─{gnome-shell},1361
  │   │   │   │   ├─{gnome-shell},1362
  │   │   │   │   └─{gnome-shell},1363
  │   │   │   ├─{gnome-session-b},1322
  │   │   │   ├─{gnome-session-b},1323
  │   │   │   └─{gnome-session-b},1325
  │   │   ├─{gdm-session-wor},1272
  │   │   └─{gdm-session-wor},1273
  │   ├─{gdm},1072
  │   ├─{gdm},1073
  │   └─{gdm},1150
  ├─wpa_supplicant,1396 -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf -P/var/run/wpa_supplica
  └─xdg-permission-,1385,gdm
      ├─{xdg-permission-},1387
      └─{xdg-permission-},1392

pstree -ap root,查看root用户的进程数的结构,包括PID号和完整的命令信息
[root@localhost ~]# pstree -ap root

systemd,1 --switched-root --system --deserialize 21
  ├─ModemManager,621
  │   ├─{ModemManager},625
  │   └─{ModemManager},697
  ├─NetworkManager,726 --no-daemon
  │   ├─dhclient,4020 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
  │   ├─{NetworkManager},734
  │   └─{NetworkManager},739
  ├─VGAuthService,643 -s
  ├─abrt-watch-log,617 -F BUG: WARNING: at WARNING: CPU: INFO: possible recursive locking detected ernel BUG atlist_del corr
  ├─abrt-watch-log,640 -F Backtrace /var/log/Xorg.0.log -- /usr/bin/abrt-dump-xorg -xD
  ├─abrtd,616 -d -s
......(省略)
/etc/wpa_supplicant/wpa_supplicant.conf -P/var/run/wpa_supplica
  └─xdg-permission-,1385
      ├─{xdg-permission-},1387
      └─{xdg-permission-},1392

七.启动进程的方式

  • 手工启动:由用户手工输入命令或者可执行程序的路径
  • 手工启动分为,前台启动(用户输入命令直接执行程序),后台启动(在命令行尾加入”&“符号)
  • 进程在前台运行时,用户必须等到该进程执行结束并退出以后才能继续输入其他命令;而进程在后台运行时,用户可以继续在当前终端输入其他命令,无需等待该进程结束
    后台启动,实例如下:

[root@localhost ~]# mount /dev/sr0 /mnt

mount: /dev/sr0 写保护,将以只读方式挂载

[root@localhost ~]# du -sh /mnt/Packages

3.8G /mnt/Packages

[root@localhost ~]# cp -r /mnt/Packages /opt &

[1] 6731

  • 调度启动,在服务器维护中,需要执行一些定时的任务,这时候用户可以实事先调度,指定任务运行的时间
  • 进程的调度启动可以通过at,crontab命令设置(at,进行一次性计划任务;crontab,用于设置周期性运行计划任务)

八.改变进程的运行方式

  1. 挂起前台正在执行的进程,ctrl + z 将该下载任务调入后台并且暂停执行

  2. jobs命令,查看后台进程;jobs -l查看后台进程的PID号

  3. 然后可以把bg加上进程号可以把尚未下载完成的数据暂停掉到后台,然后可以在通过bg加上进程号,把下载任务调到前台继续下载

  4. fg加上进程号也可以把尚未下载完成的数据暂停放入后台,也可以再次fg加上进程号调到前台,但是如果一旦调到前台之后就不能再次调到后台,这也是跟bg最大的区别点

九.终止进程的运行

ctrl + c,可以中断前台执行的进程(不能中断后台运行的进程)
kill命令,终止进程时需要进程的PID号作为参数

实例如下:
[root@localhost opt]# pgrep -l sshd

1042 sshd
4127 sshd

[root@localhost opt]# kill 1042
[root@localhost opt]# pgrep -l sshd

4127 sshd

kill -9+PID号,强制终止对于无法正常终止的系统进程(后台进程)
实例如下:
[root@localhost ~]# kill -9 7672
[root@localhost ~]# jobs -l

[1]+ 7672 已杀死

killall命令终止进程,当需要结束系统中多个相同名称的进程时使用killall更加简便
killall -9 + 进程名,强制终止
[root@localhost opt]# pgrep -l sshd

4127 sshd
8073 sshd

[root@localhost opt]# killall sshd

[root@localhost opt]#pkill -9 -U zhangsan 强制终止zhangsan用户所有的进程(即令zhangsan用户强制退出)

十.at命令,一次性任务设置

at命令,设置的计划任务只在指定的任务时间执行一次,并且对应的系统服务atd必须已经运行

此外,计划执行的任务的时间、日期必须安排在当前系统的时刻之后,否则无法正确设置计划任务

在at命令行中依次指定计划执行任务的时间、日期作为参数,在"at>"提示符的任务编辑界面,每行设置一条执行命令,可以依次设置多条语句,最后按ctrl+D提交任务即可。所设置的命令操作将在计划的时间点被一次执行

以下操作,先通过date确认当前的系统时间,并设置在该时间点自动执行任务,且统计该时间点系统由root用户运行的进程数量,并且将该数值保存到指定目录文件中

实例如下:
[root@localhost ~]# date

2019年 11月 12日 星期二 19:24:24 CST

[root@localhost ~]# at 19:30 2019-11-12
at> pgrep -l -U root | wc -l > /opt/day01.txt
at> <EOT

job 1 at Tue Nov 12 19:30:00 2019

[root@localhost ~]# cd /opt
[root@localhost opt]# ls

day01.txt rh

[root@localhost opt]# cat day01.txt

172

使用atq可以查看未执行的任务
使用atrm 任务编号,删除未执行的任务,已经执行的任务无法删除
注:任务编号是固定的

十一.crontab命令,周期性任务设置

crontab命令设置的计划任务可以按预设的周期性重复执行
启用周期性任务的前提条件是系统服务crond必须已经运行
crontab的配置文件和目录:

/etc/crontab,系统任务配置文件。该文件中设置的是维护Linux系统所需要的任务。该文件包括设置Shell环境、可执行路径等变量的操作

[root@192 ~]# cat /etc/crontab

SHELL=/bin/bash //设置执行计划任务的shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin //定义可执行命令及程序的路径
MAILTO=root //执行计划任务时使用的主目录

crontab命令,设置用户的周期性计划任务列表

-e:编辑计划任务列表
-l:列表显示计划任务
-r:删除计划任务列表
-u:指定用户,默认时指定当前用户

[root@192 ~]# crontab -e //相当于vim编辑器,且操作相同

[root@192 ~]# crontab -l //在-e编辑里面写了这条命令,表示每三分统计

*/3 * * * * ps aux | wc -l > /opt/night.txt    //该系统产生的进程数并且放到/opt/night.txt 

[root@192 ~]# crontab -r 删除计划任务
[root@192 ~]# crontab -l 查寻计划任务列表
no crontab for root

crontab计划任务的配置格式(分钟 小时 日期 月份 星期 执行的命令)
实例如下:

50 7 * * * /bin/systemctl sshd start            每天7:50开启ssh服务
50 22 * * * /sbin/systemctl sshd stop            每天22:50关闭ssh服务
0 0 */5 * * /bin/rm -rf /var/ftp/pub/*           每隔5天清空该目录中的数据
30 7 * * 6 /sbin/systemctl httpd restart         每周六7:30重启httpd服务
30 17 * * 1,3,5 /bin/tar cfvj httpdconf.tar.bz2 /etc/httpd/   周1,3,5,17:30就压缩该目录下的数据

crontab计划任务的配置字段
分钟(059),小时(023),日期(131),月份(112),星期(1~7),命令(可以是普通的命令,也可以是程序脚本)
,表示任意连续时间;-,表示一个连续的时间范围,如“1-4”表示整数1、2、3、4;,(逗号),表示一个间隔不连续范围;/,表示间隔频率,如在日期字段中“/3”表示每隔3天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值