点击蓝色目录查找对应内容
程序、进程、线程概述
程序:港、台译做电脑程式。计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。
进程:是计算机中的程序关于du某数据集合上的一次运行活动,是系统进行资源分配zhi和调度的基本单位,是操dao作系统结构的基础。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
进程管理内容
查看进程信息
ps命令:查看静态的进程统计信息
方法一:
[root@localhost ~]# ps aux
a 系统当前的所有进程
u 指定用户
x 该用户在所有终端下的进程
第一列,称为字段或者属性
PID 进程号 进程的唯一身份标识,有且仅有一个
cpu 占用率
mem 内存占用率
vsz 虚拟内存
rss 物理内存
TTY 终端
? 代表未知 本地加载的基本都是未知
STAT 当前进程状态
R 代表运行中
S 代表可中断休眠进程
D 代表不可中断休眠进程
s 代表父进程
< 代表高优先级
N 代表低优先级
Z 僵尸进程
l代表多线性进程
前台进程
START 启动时间
TIME 进程占用CPU的总时间
COMMAND 名称
方法二:
[root@localhost ~]#ps -elf
PID 进程号
PPID 当前进程父进程状态*
PRI 用户态优先级,人为控制
NI 内核态优先级,NIce值(-20~19,值越小,优先级越大)
ADDR -代表正在运行
SZ 代表虚拟内存 交换分区
WCHAN 当前进程的内核名称
top命令
查看动态的进程排名信息
在查看动态进程时:按
c cpu由大到小排序
M 内存由大到小排序
q 退出动态进程
[root@localhost ~]# top
top - 15:12:21 up 2:22, 7 users, load average: 0.00, 0.01, 0.05
Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 11.8 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 68648 free, 1308412 used, 489964 buff/cache
KiB Swap: 4194300 total, 4158092 free, 36208 used. 321576 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
54848 root 20 0 157860 2192 1488 R 5.6 0.1 0:00.03 top
1 root 20 0 128164 4776 2672 S 0.0 0.3 0:02.64 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.88 ksoftirqd/0
……………………省略部分内容
pgrep命令
-U 指定特定用户
-l 长格式显示进程名
-t 指的是终端
根据特定条件查询进程PID信息
[root@localhost ~]# pgrep -l "log" //模糊匹配,只要包含log都会显示出来
281 xfs-log/sda2
488 xfs-log/sda1
489 xfs-log/sda5
575 rsyslogd
581 abrt-watch-log
622 systemd-logind
[root@localhost ~]# pgrep -l -U ml "volume" //指定用户匹配volume
52100 gvfs-mtp-volume
52137 gvfs-afc-volume
52148 gvfs-goa-volume
pstree命令
以树形结构列出进程信息
pstree -aup
-a 显示完整信息
-u 列出对应用户名
-p 列出对应PID号
init,1 代表初始化的进程
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzIxOTgxOA==,size_16,color_FFFFFF,t_70)
[root@localhost ~]# pstree -aup //列出所有进程信息
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,578
│ ├─{ModemManager},600
│ └─{ModemManager},614
├─NetworkManager,706 --no-daemon
│ ├─dhclient,17013 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
│ ├─{NetworkManager},710
│ └─{NetworkManager},712
…………省略部分内容
[root@localhost ~]# pstree -ap ml //列出用户ml所有信息
at-spi-bus-laun,53506
├─dbus-daemon,53511 --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
│ └─{dbus-daemon},53512
├─{at-spi-bus-laun},53507
├─{at-spi-bus-laun},53508
├─{at-spi-bus-laun},53509
└─{at-spi-bus-laun},53510
…………省略部分内容
[root@localhost ~]# pstree -ap ml //注销用户后再次输入命令
未发现进程。 //所有进程关闭了
手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号
例如:
[root@localhost dev]# mount /dev/sr0 /mnt/ //挂载
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost dev]# cd /mnt
[root@localhost mnt]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@localhost mnt]# cp -r /mnt/Packages /opt //复制安装包到opt目录下(属于前台)
^C //在此复制期间,无法操作其他命令,crtl+c终断
[root@localhost mnt]# cd /opt
[root@localhost opt]# ls
Packages rh
[root@localhost opt]# cd Packages //进入,查看到已经复制了一部分
[root@localhost Packages]# ls
389-ds-base-1.3.6.1-16.el7.x86_64.rpm autocorr-pt-5.0.6.2-14.el7.noarch.rpm
389-ds-base-libs-1.3.6.1-16.el7.x86_64.rpm autocorr-ro-5.0.6.2-14.el7.noarch.rpm
abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm autocorr-ru-5.0.6.2-14.el7.noarch.rpm
abrt-2.1.11-48.el7.centos.x86_64.rpm autocorr-sk-5.0.6.2-14.el7.noarch.rpm
abrt-addon-ccpp-2.1.11-48.el7.centos.x86_64.rpm autocorr-sl-5.0.6.2-14.el7.noarch.rpm
abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64.rpm autocorr-sr-5.0.6.2-14.el7.noarch.rpm
abrt-addon-pstoreoops-2.1.11-48.el7.centos.x86_64.rpm autocorr-sv-5.0.6.2-14.el7.noarch.rpm
[root@localhost opt]# cp -r /mnt/Packages /opt & //在命令后面使用&符号,可在后台运行复制,前台可继续操作
[1] 55099 *输出信息中包括后台任务的序号、PID号*
[root@localhost opt]#
调度启动
进程的前后台调度:
ctrl +z 组合键:将当前进程挂机,即调入后台并停止执行
ctrl +c 组这件:中断正在执行的命令
jobs命令:查看处于后台的任务列表
fg命令:将后台进程恢复到前台运行,可指定任务序号
[root@localhost ~]# vim abc1.txt & //后台创建abc1.txt
[1] 55925 //后台序号1 PID:55925
[root@localhost ~]# jobs -l
[1]+ 55925 停止 (tty 输出) vim abc1.txt //停止状态
[root@localhost ~]# vim abc2.txt & //后台创建abc1.txt
[2] 55934 //后台序号2 PID:55934
[root@localhost ~]# jobs -l //查看后台任务列表
[1]- 55925 停止 (tty 输出) vim abc1.txt
[2]+ 55934 停止 (tty 输出) vim abc2.txt
[root@localhost ~]# killall -9 vim //强制杀死vim的所有进程
[1]- 已杀死 vim abc1.txt
[2]+ 已杀死 vim abc2.txt
[root@localhost ~]# jobs -l //查看后台任务列表
[root@localhost ~]# fg 1
-bash: fg: 1: 无此任务
[root@localhost ~]# fg 2
-bash: fg: 2: 无此任务
终止进程
kill用于终止指定的PID号的进程
killall用于终止指定名称的所有进程
-9 选项用户强制终止
pkill命令**(重要)
根据特定条件终止相应的进程
常用命令选项
-U:根据进程所属的用户名终止相应的进程
-t:根据进程所在的终端终止相应进程
管理员可以对用户进行终止进程
普通用户不可以对管理员进行终止进程,但可以查看进程
[root@localhost ~]# pgrep -l -U "ml" //查询ml用户PID信息
53307 gnome-keyring-d
53329 gnome-session-b
53337 dbus-launch
………… 省略部分内容…………
[root@localhost ~]# who //查询后台登陆用户
root :1 2019-10-29 13:39 (:1)
root pts/0 2019-10-31 10:57 (:1)
root pts/2 2019-11-12 13:19 (192.168.17.1)
ml :2 2019-11-12 14:27 (:2)
[root@localhost ~]# pkill -9 -U ml //强行终止ml用户的进程
[root@localhost ~]# who //查询后台登陆用户,已经没有ml用户了
root :1 2019-10-29 13:39 (:1)
root pts/0 2019-10-31 10:57 (:1)
root pts/2 2019-11-12 13:19 (192.168.17.1)
计划任务管理
at命令
一次性计划任务
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务
at [HH:MM] [yyyy-mm-dd] //格式
1、date 获取当前时间
2、设置时间
3、 at< 进入子模式输入命令 wc -l 统计行数
4、ctrl+d 提交任务
atq 查看准备执行的任务列表
atrm 删除指定编号的at任务
[root@localhost ~]# date //获取当前时间
2019年 11月 12日 星期二 18:35:00 CST
[root@localhost ~]# at 18:38 2019-11-12 //在18:38 2019-11-12
at> ps aux | wc -l > /opt/123.txt //输入要执行的命令
at> <EOT> //按ctrl+d提交任务
job 1 at Tue Nov 12 18:38:00 2019
对于已经设置但还未执行(未到时间点)的计划任务,可以通过atq命令进行查询,但已经执行过的at任务将不会再出现在列表中
[root@localhost ~]# atq //查看准备执行的任务列表
1 Tue Nov 12 18:38:00 2019 a root
[root@localhost ~]# date //获取当前时间
2019年 11月 12日 星期二 18:39:04 CST
[root@localhost ~]# atq //查看准备执行的任务列表
[root@localhost ~]# cat /opt/123.txt //查看是否由被执行成功
192
若要删除指定编号的at任务,可以使用atrm命令。删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中。但已经执行过的任务无法删除。
[root@localhost ~]# at 21:00 2019-11-12 //在21:00 2019-11-12
at> shutdown -h now //输入要执行的命令
at> <EOT> //按ctrl+d提交任务
job 2 at Tue Nov 12 21:00:00 2019
[root@localhost ~]# atq //查看准备执行的任务列表
2 Tue Nov 12 21:00:00 2019 a root
[root@localhost ~]# atrm 2 //删除第2条at计划任务
[root@localhost ~]# atq //确认第2条任务已被删除
crontab命令
按照预先设置的时间周期(分钟、时、日、月、周)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件和目录:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名
crontab的配置文件和目录
1)/etc/crontab ——系统任务配置文件
/etc/crontab文件中设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户手动修改此文件。例如,该文件中包括了设置Shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash //设置执行计划任务的Shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin //定义可只能怪命令及程序的路径
MAILTO=root //将任务输出信息发送到指定用户的邮箱
# For details see man 4 crontabs
# Example 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) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
//根据“/etc/crontab”配置文件中的设定,crond将按照不同的周期重复执行相应目录中的任务脚本文件
2)/etc/cron.*/ ——系统默认设置cron任务的配置文件存放目录
3)/var/spool/cron/ ——用户cron任务的配置文件存放目录
由用户自行设置(使用crontab命令)的cron计划任务将被保存到目录/var/spool/cron/中。当用户使用crontab命令创建计划任务,就会在/var/spool/cron/目录下生成一个与用户名相同的文件。例如,root用户的cron计划任务保存在配置文件/var/spool/cron/root中。
[root@localhost ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 44 11月 12 20:12 /var/spool/cron/root
crond守护进程会自动检查/etc/crontab文件、/etc/cron.*/目录及/var/spool/cron/ 目录中的改变,如果发现有配置更改,他们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动crond守护进程就可以使设置生效
周期性计划任务配置
分时日月周
时间数值的特殊表示方法:
“ * ”:表示该范围内的任意时间
逗号“,”:表示间隔的多个不连续时间点,如“3,4, 6, 8”
减号“ - ”:表示一个连续的时间范围,如“1-4"表示整数1、2、3、4。
斜杠“ / ”: 指定间隔的时间频率,如在日期字段中的“ */3 ”表示每隔3天。
示例:
0 17 * * 1-5 周一到周五每天17:00
0 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18/2 * * * 8点到18点之间每2小时
0 * */3 * * 每3天
示例:
若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上7:50自动开启sshd服务,22:50关闭sshd服务;②每隔五天清空一次FTP服务器公共目录“/var/ftp/pub”中的数据;③每周六的7:30重新启动系统中的httpd服务;④ 每周一、周三、周五的下午17:30,使用tar命令自动备份“/etc/httpd”目录。以上任务可由root用户通过crontab设置以下计划完成。
[root@kgc 〜]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 0 */5 * * /bin/nn -rf/var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
管理cron计划任务
-u 指定用户
crontab -e [-u 用户名] ###编辑计划任务
crontab -l [-u 用户名] ###查看计划任务
crontab -r [-u 用户名] ###删除计划任务
[root@localhost ~]# crontab -e //编辑计划任务进入编辑页面
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l //输入完成wq保存,查看计划任务
15 20 12 11 * /usr/bin/cp -r /home/ml /opt/
[root@localhost ~]# ls /home
ml
[root@localhost ~]# ls /opt //查看opt目录下 ml家目录已经复制了
123.txt ml Packages rh
[root@localhost ~]# crontab -r //清空计划任务
在设置crontab计划任务过程中,每一条记录只能运行一条命令,当只需要删除某一条计划任务时,可以通过“crontab -e”进行编辑,删除;而若要清空所有的计划任务时,可以使用“crontab -r”命令。
总结
●查看进程的命令(ps、top、pgrep、pstree)
●进程控制
启动进程
调度进程(Ctrl+Z组合键、jobs、bg、fg)
终止进程(kill、killall、pkill)
●at命令设置一次性计划任务
●crontab命令可以设置周期性计划任务
●crontab计划任务的配置字段,依次为分钟、小时、日期、月份、星期