正在工作的程序叫做进程
父进程和子进程
进程之间可能存在父子进程关系,父进程是对子进程进行管理,子进程是对客户端进行相应,进程在执行的时候往往是以不同用户的身份进行执行,主进程可能是以管理员的身份,子进程可能以普通用户的身份。
#####
子进程
子进程为了安全一般使用普通用户(称为程序用户)的身份来执行,或者进行相应
程序用户的特点
程序用户权限低,即使被劫持了那么他获得的权限也仅仅是这个程序用户的权限,程序用户在本机上不会对系统造成严重的安全威胁,很多软件可能都是以这种程序用户的身份来运行的,不同软件的程序用户的名称可能不一样。
ps命令
用途:查看静态的进程统计信息 格式
ps uf
ps -elf
ps ax
ps axfu
a显示所有的
x活跃的进程
f列出父子关系
u可以显示这个进程对应的执行用户
以上可以随意组合
ps ax 显示所有活跃的进程
PID:
进程id systemd是系统中第一个进程,他的进程id是1
cpu对进程进行控制的时候,通过id来区分,每个进程工作的时候都会分配一个唯一的编号,这个编号就是系统(或者说cpu)对他进行控制的时候所识别的编号,如果要杀死一个进程可以对进程的名称进行操作,也可以对进程的PID进行操作,ID都会变的当我们把一个ID杀死后,下次他起来的时候他之前的ID可能会被分配出去了,只有systemctl的ID是不会变的他的ID是1
TTY:
TTY称为终端,终端就类似是在那个窗口运行的,比如远程登录算一个终端,在图形界面下有终端。
?代表不依赖任何终端,这个程序运行的时候,用户还没登录。系统启动的时候运行着一些进程,用户还未登录他不依赖任何终端,这个一般称为守护进程。如果他在某个终端运行着他会写着具体的终端名称
STAT
STAT:状态,S:running(运转)代表此进程工作了但是没事干。S:sleeping(睡觉)不占用系统资源
R:代表占用系统资源,后面时间代表执行该进程的时候占用cpu时间0:00 都是0代表它占用的cpu的时间太短了,显示不出来。
COMMAND
COMMAND:进程所对应的名称,进程名。
top命令
用途:查看动态的进程排名信息,那个进程占用资源多就排在前面
top
17:57:40:当前时间
up 11 min:运行了多长时间(系统启动多长时间了)
2 users :有几个用户在登录
load average: 0.10, 0.30, 0.23 当前系统负载情况,当前系统忙闲程度。
第二行:Tasks :209 total, 3running,206 sleeping 0 stopped, 0 zombie
任务数,进程数 总共209个进程 3个正在running(运转) 206个正在 sleeping(睡觉)0个正在处于stopped(关闭状态)0个zombie(僵尸)状态
僵尸状态也是正常的,父进程关闭了 子进程就处于僵尸状态(管他的没有了)
第三行:%Cpu(s):1.9 us, 1.9 sy, 0.0 ni , 代表cpu资源的分配
96.3 id id代表空闲 当前cpu空闲率是96.3% 代表cpu不忙 代表系统当前可能空闲。
第四行KiB Mem : total 总的是多少 free 自由的 used 用了多少
第五行是虚拟内存
在下面是进程的排名,谁占用资源多谁就排在前面。
cpu在工作的时候:一台电脑可以同时做多个事情一边聊天一遍听音乐,看似同时的其实不是,cpu把他的时间分成很多时间片,很短的时间片,他们在工作的时候cpu接受他的请求对他进行控制,快速的切换到下一个时间片,每个时间片或者说每个时间处理不同的任务,只是他切换的太快了,执行一圈过来以后,又执行一圈,让我们觉得他同时都在工作一样。
有些进程占用cpu资源多,cpu会对他进行照顾,这时候就会看到他排名靠上,系统会过一会对当前系统占用资源的状况做一个统计,然后显示,过几秒又统计在这显示一下,一直发生变化,谁占用cpu资源多或者cpu正在处理谁的时候他就会排在前面。
pgrep 命令 用途:根据特定条件查询进程 PID 信息
pgrep httpd 这样只能看到他的进程号
pgrep -l httpd 这样就能看到他的进程名和他的进程号
pstree 将所有行程以树状图显示(显示进程树)
pstree -aup
a所有的
u执行用户是谁 (如果没有显示用户的话,那么这个进程是以管理员的身份运行的可以不显示。)
p显示进程id
进程的启动方式
手工启动
前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号
在执行命令的时候 后面加上& 他就自动丢掉后台执行 并显示进程id
[]的数代表放在后台的任务号
后面的数字是 这条命令所对应的进程号
当命令在前台运行的时候 ctrl+z 丢到后台挂起(不运行)
bg 任务号 在后台运行 (只有一个任务的时候不输任务号)
fg 任务号 把后台运行的调到前台(只有一个任务的时候不输任务号)
jobs 查看后台任务
将后台进程恢复到前台运行,可指定任务序号
调度启动 使用 at 命令,设置一次性计划任务 使用 crontab 命令,设置周期性计划任务
终止进程的运行
Ctrl+C 组合键
中断正在执行的命令
kill、killall 命令
kill用于终止指定PID号的进程 killall用于终止指定名称的所有进程
-9 选项用于强制终止
kill 进程号
kill -9 进程号 强制杀死
killall 进程名
killall -9 进程名 强制杀死
pkill命令
用途:根据特定条件终止相应的进程 常用命令选项: -U:根据进程所属的用户名终止相应进程 -t:根据进程所在的终端终止相应进程
pkill -9 进程名
pkill -9 -U 用户名 踢出用户登录
pkill -9 -t 终端名
who查看当前登录的用户
计划任务管理
at命令
一次性计划任务
服务脚本名称:/etc/init.d/atd 设置格式 at 时:分 年-月-日
date 查看时间
at 10:04 回车
init 6 ctrl+D 提交
设置10点04分 重启
atq 查看任务
atrm 编号 删除任务
crontab命令
周期性计划任务
按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作 属于周期性计划任务
cron 软件 一般被称为cron服务
crontab 下达指令的
crond 真正干活的是他 一直处于工作状态
管理cron计划任务
编辑计划任务
crontab -e -u 用户名 想以那个用户执行 就写上用户名 不写就是当前用户
查看计划任务
crontab -I -u 用户名
删除计划任务
crontab -r -u 用户名
注意:命令要求绝对路径(用which查看命令路径)
如果分钟写* 那就是每分钟执行一次
字段 | 说明 |
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,0或7代表星期日 |
命令 | 要执行的命令或程序脚本 |
时间数值的特殊表示方法
*表示该范围内的任意时间 ,表示间隔的多个不连续时间点
-表示一个连续的时间范围 /指定间隔的时间频率 应用示例 0 17 * * 1-5 周一到周五每天17:00 30 8 * * 1,3,5 每周一、三、五的8点30分 0 8-18/2 * * * 8点到18点之间每2小时 0 0 */3 * * 每3天
注意:一般有周几就不设置日月,如果设置日月了一般就不会设置周几(有时候可能会出现冲突)
实验命令