目录
linux
父进程与子进程shell
守护进程Daemonvim
进程管理bash
查看进程网络
计划任务app
Priority和nice优先级
ssh
1、父进程与子进程
ide
子进程是父进程衍生出来的程序。举个你们常用的例子,咱们每次登录的shell,会触发一个进程,咱们都是在这个shell下输入命令进行工做的,其实呢,你输入的命令也会触发一个新的进程,这个新的进程就是子进程,而一开始登录的shell进程则为父进程。咱们作一个小实验,咱们在当前登录shell下再登录一个新的shell,而后输入一个命令,查看进程的状态信息。
工具
PID是该进程的识别码,PPID是父进程的识别码。咱们发现第一个bash的PID和第二个bash的PPID都是2446,ping命令的PPID和第二个bash的PID都是2660,说明bash下输入的命令都是当前bash的进程所产生的嘛。url
2、守护进程Daemon(常驻内存)
在系统引导过程当中就启动的进程,咱们称之为守护进程(Daemon),Windows下叫服务,而且这类进程会持续的进行,提供系统稳定性和网络所必须的功能。
前台进程和后台进程的区别:
前台和后台的区分依据是控制终端界面,和终端交互的进程为前台进程,此类进程须要及时对终端作出响应,具备较高的优先级;而和终端不进行交互的进程为后台进程,此类进程不须要对终端作出响应,优先级较低。前台进程和后台进程能够进行切换,注意,同时后台进程也分为依附于终端的后台进程和不依附于终端的后台进程,对于那些彻底不受终端控制的后台进程则不能切换到前台。
守护进程是后台进程的一种
进程 |
区分依据: 是否与终端进行交互 |
前台进程 | 与终端交互 | |
后台进程 |
不与终端交互 | 且依附于终端的后台进程(能够与前台进程进行切换) | ||
而不依附于终端的后台进程(例如守护进程) |
3、进程管理
一般在当前bash下执行一个任务,必须等待这个任务执行完毕后才能输入命令执行下一个任务,如今咱们要进行文档复制、资料查询、软件安装等等多个任务同时工做,这就要用到进程管理的知识。
3.1 将任务转到后台(&)
直接在执行任务的命令后边加&,而后咱们能够输入命令执行另外一个任务从而实现多任务执行。例如,咱们将/etc下的文件和目录进行备份,同时不须要等待
[root@CentOS6 ~]# tar -zpc -f /app/etc.tar.gz /etc/* & [1] 2948 # 2948表明PID [root@CentOS6 ~]# tar: Removing leading `/' from member names # 一段时间以后,出现以下信息表明该任务完成 [1]+ Done tar -zpc -f /app/etc.tar.gz /etc/*
这里会有一个问题,若是对于那些会有显示结果的命令,例如ping命令,使用&以后,终端会一直显示ping命令的返回结果,这时候由于已是后台进程,用ctrl+c也不起做用,咱们怎么办呢,咱们能够用数据重定向,例如:
ping 172.18.0.1 > /tmp/txt 2>&1 &
3.2 查看后台工做状态(jobs)
若是想知道有多少进程在后台工做,能够利用jobs命令查看,下图为个人系统如今后台工做的进程,显示结果表示了后台进程的工做状态等信息,特别注意,jobs命令显示的依附于终端的后台进程,另外一个注意的是前边的+ -号,他们具备必定的含义,他们表明fg取用的顺序。
jobs -l # 列出后台进程的详细信息,包括PID
-r # 仅列出正在运行的后台进程
-s # 仅列出暂停的后台进程
3.3 将后台进程转为前台进程(fg)
咱们想让后台进程转到前台来运行,可使用fg命令。
fg # 默认将jobs命令显示结果中带 + 的转到前台
- # 将带 - 的转到前台
%NUM # 将jobs显示结果中指定的数字的进程转到前台
3.4 后台进程Stopped转为Running(bg)
下图中,我输入命令 /bin/ping 172.18.0.1 > /tmp/txt ,回车以后按下ctrl+z暂停该命令, ping命令的进程处于Stopped状态,使用bg以后,变为Running状态。
bg # 针对默认将jobs命令显示结果中带 + 的进程
- # 针对带 - 的进程
%NUM # 针对jobs显示结果中指定的数字的进程
3.5 杀死后台进程(kill)
kill命令直接将后台进程粗暴地终止移除,不过这个命令有点特别,须要指定讯号来进行处理,咱们先来看一下kill命令的用法:
kill -l # 查看可以使用的signal,以后能够man 7 signal查看具体的效果
kill -signal %NUM | PID # kill命令的格式,%NUM为jobs命令显示结果中的第一列数字
先介绍几种经常使用的signal
kill -0 # 无做为,能够用来单纯的判断进程是否能够运行
kill -1 # 强制进程从新读取配置参数的文件
kill -2 # 终止正在运行的进程,等同于ctrl+c
kill -9 # 强制删除一个进程,例如,对于vim编辑文件file,不会主动删除.file.swp
kill -15 # 正常终止一个进程,例如,对于vim,主动删除.file.swp
killall 进程名 # 根据进程名杀死父进程及其子进程,和上面的依据PID不同
pkill -u 用户名 # 杀死指定用户运行的全部进程
pkill -t 终端名 # 杀死指定终端运行的全部进程
输入 pkill -u lisi 以后,ps aux 查看进程结果
3.6 将后台进程脱离终端
对于那些依附于终端的后台进程,若是把终端关闭以后,该终端的进程都将关闭,那么有什么解决这种问题的方法。
nohup command &> /dev/null
screen ; command
4、查看进程相关命令
4.1 ps命令
ps 显示进程的运行情况
ps -l # 仅显示当前bash下的进程情况
ps -lA # 显示系统全部进程的信息,每一列字段表明的意义以下
F |
进程的旗标(flag),为总结权限,4表明权限为root,1表明该子程序仅进行了复制 |
S | 运行状态(stat),R=>运行,S=>睡眠,D=>堵塞,T=>中止状态,Z=>僵尸状态,已经终止可是没法移除内存 |
UID/PID/PPID | 进程的发起人/进程号/父进程号 |
C |
CPU使用率,单位百分比 |
PRI/NI |
priority/nice优先级 |
ADDR/SZ/WCHAN |
ADDR表明进程在内存的那个部分,- 表明正在运行状态;SZ表明进程所占内存大小;WCHAN表明进程是否在运行,- 表示正在运行 |
TTY |
登录者的终端机位置,若为远程登陆则为pts/n |
TIME |
CPU运行该进程所费的时间 |
CMD | 该进程是什么指令触发的 |
ps aux # 不带-,显示系统全部的进程信息,每一列字段表明的意义以下
USER |
进程的发起人 |
PID |
进程号 |
%CPU |
进程占用CPU百分比 |
%MEM | 进程占用物理内存百分比 |
VSZ/RSS |
进程占用虚拟内存的大小/进程占用的固定内存的大小,能够理解为页的数量 |
TTY |
控制终端的ID,?表明与终端无关的进程,tty1-tty6为本机登陆终端,pts/n为远程登陆终端 |
STAT | 进程状态 |
START/TIME | 进程启动的时间/进程实际占用CPU的时间 |
COMMAND |
触发进程的指令,若是后边跟了<defunct>,表示这是一个僵尸进程 |
ps axjf # 一样不带 - ,进程之间具备相关性,该命令能够用相似程序树的形式显示进程信息
看图中一段的显示内容,咱们能够看出,当前我是用sshd提供远程网络服务远程登陆主机,该程序(父进程)提供一个bash环境(子进程),我在这个bash环境(父进程)下输入命令ps axjf触发了一个新的进程(子进程)。
4.2 搜索进程(egrep)
pgrep -u UID/用户名 # 基于用户名搜索进程
-l# 显示进程名
[root@CentOS6 ~]# pgrep -l -u root # 注意这里的-u和用户名必须写一块儿
pgrep -t 终端名 # 基于终端名搜索进程
[root@CentOS6 ~]# pgrep -l -t pts/1
pgrep -P PID # 搜索进程的子进程
[root@CentOS6 ~]# service httpd status httpd (pid 2692) is running... [root@CentOS6 ~]# pgrep -l -P 2692 2695 httpd 2696 httpd 2697 httpd 2698 httpd 2699 httpd 2700 httpd 2701 httpd 2702 httpd [root@CentOS6 ~]#
pidof 进程名 # 查询进程名的PID(包括子进程)
[root@CentOS6 ~]# pidof httpd 2702 2701 2700 2699 2698 2697 2696 2695 2692
4.3 系统工具
uptime 打印系统总共运行了多长时间和系统的平均负载,特定时间间隔内系统运行队列中的平均进程数叫作平均负载
对于一个双核CPU的话,当平均负载达到6的时候,说明CPU已经充分利用
[root@CentOS6 ~]# uptime
09:49:42 |up 30 min,| 2 users,| load average: 0.00, 0.00, 0.00
-----------------------------------------------------------------
当前时间 | 运行时间 | 链接用户 | 一、五、10分钟的平均负载
[root@CentOS6 ~]# uptime 09:49:42 up 30 min, 2 users, load average: 0.00, 0.00, 0.00 [root@CentOS6 ~]# dd if=/dev/zero of=/dev/null & # 经过无限写入操做,观察系统的负载 [1] 2779 [root@CentOS6 ~]# uptime 09:55:52 up 36 min, 2 users, load average: 0.15, 0.03, 0.01 [root@CentOS6 ~]# uptime 09:55:53 up 36 min, 2 users, load average: 0.15, 0.03, 0.01 [root@CentOS6 ~]# uptime 09:55:55 up 36 min, 2 users, load average: 0.15, 0.03, 0.01 [root@CentOS6 ~]# uptime 09:55:55 up 36 min, 2 users, load average: 0.15, 0.03, 0.01 [root@CentOS6 ~]# uptime 09:55:56 up 37 min, 2 users, load average: 0.15, 0.03, 0.01 [root@CentOS6 ~]# uptime 09:55:57 up 37 min, 2 users, load average: 0.22, 0.05, 0.02 # 负载发生变化 [root@CentOS6 ~]# uptime 09:55:57 up 37 min, 2 users, load average: 0.22, 0.05, 0.02 [root@CentOS6 ~]# uptime 09:55:58 up 37 min, 2 users, load average: 0.22, 0.05, 0.02
动态监控进程情况(top)
top -d NUM # 指定刷新时间间隔,默认3s
top -b # 显示全部进程
top -n NUM # 刷新多少次后退出
top命令有许多内置命令,能够改变top命令的显示效果
排序
P 根据CPU百分比,默认
M 根据内存百分比
T 根据CPU运行时间
首部信息显示(以下)# 执行相应内置命令会使得对应行内容显示或消失
top - 10:09:11 up 50 min, 2 users, load average: 0.00, 0.00, 0.00 ==> l(字母) Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie ==> t 同时改变Tasks和Cpu Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st ==> 1(数字) Cpu1 : 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 2038352k total, 236156k used, 1802196k free, 24860k buffers ==> m 改变Mem和Swap Swap: 4194300k total, 0k used, 4194300k free, 65400k cached
退出top :q
修改刷新时间间隔:s + 间隔时间(单位S)
杀死指定进程:k + PID
保存至文件:W(大写) # 保存至/root/.toprc文件中
htop # 该命令须要从epel源安装,提供更多top没有的功能
安装过程:
配置epel源
1 [mage-epel]
2 name=mage-epel
3 baseurl=http://172.18.0.1/fedora-epel/6/x86_64/
4 gpgcheck=0
yum search htop,发现存在htop的软件包
yum -y install htop
htop命令显示效果以下:
5、计划任务
计划任务可让系统在将来某个时间执行命令。
5.1 at
at命令只是临时的计划任务,在成功一次以后就会失效。这是一个依赖于atd服务的命令,若是该服务中止,则该命令不会生效。另外,在制定了计划任务以后,即便重启系统,该计划任务仍是有效的,由于系统把at计划任务写入到了硬盘中。对应的相关目录是/var/spool/at,以下图:
用法:
at HH:MM [YYYY-MM-DD] 自定义任务 ctrl d ******************************* 或者 echo 内容 | at HH:MM [YYYY-MM-DD] ******************************* 或者 at HH:MM [YYYY-MM-DD] << EOF 内容 EOF ******************************* 或者 编辑文件内容 at HH:MM [YYYY-MM-DD] -f 文件名
制定at计划任务的时间
at 设置的时间若是和当前时间冲突,则系统自动断定为次日的这个时间
at noon # 表示12:00
at midnight # 表示00:00
at teatime # 表示16:00
at now+n{minutes,years,days,weeks} # 表示指定多长时间以后
at命令的选项
at -V # 显示版本信息
at -l # 显示计划任务,等同于命令atq
at -c n # 查看指定计划任务的详细信息,等同于命令atrm
at -d n # 删除指定计划任务
at -m # 当到了指定时间后,不管任务执行正确与否,都将会发送邮件给用户
限制用户使用at制定计划任务
/etc/at.deny 禁止使用at的用户名单
/etc/at.allow 语序使用at的用户名单
当/etc/at.allow存在时,/etc/at.deny失效。当/etc/at.allow和/etc/at.deny都不存在时,只有root才能使用at。
5.2 cron
cron是周期性的计划任务,依赖于crond服务,不过cron计划任务须要直接对文件进行修改才能实现,这个文件就是/etc/crontab
/etc/crontab内容以下:
时间表示法:
①特定值
②* 表示取值范围内的全部值
③N,N,N 表示离散取值
④N-N 表示连续取值
⑤/N 表示在范围内的步长
6、Priority和nice优先级
linux会给予进程一个执行优先级priority(PRI),值越低优先级越高,PRI是系统核心动态控制调整,用户没法进行更改,那么咱们若是想调整进程的优先级,而PRI又不能调整,咱们引进了nice(NI)来使得用户能够手动修改进程的运行优先级别。
nice值的取值范围为-20--19,可是nice值的调整对用户也有限制,root能够随意调整本身和其余用户的nice值;普通用户只能调整本身的nece值,而且调整范围为0--19,防止nice为负值时抢占资源,同时nice值只能越调越高,不能下降nice值,PRI和NI具备必定的相关性:
PRI(new)=PRI(old)+NI
须要注意的是,从关系式来看,虽然NI能够影响进程的优先级,可是进程的优先级最终还要通过系统核心决定,全部咱们不能简单的理解PRI+NI。
nice # 对新创建的进程设定nice值
格式:nice -n NUM COMMAND # NUM范围为-20--19
咱们对vim命令设置nice值为5,本来预设的PRI值为bash的PRI(80),如今变为了85
renice # 从新调整已存在进程的nice值
格式:renice NUM PID # NUM范围为-20--19,若是超出这个范围,则自动调整为最近的-20或19
先查看进程bash的PRI和NI等信息,而后输入renice命令修改bash进程的NI,修改完以后发现PRI和NI发生变化,同时咱们也发现子进程也继承了父进程的PRI和NI。