1.进程的概念
前台进程:
在Shell提示处打入命令后,创建一个子进程,运行命令,Shell等待命令退出,然后返回到对用户给出的提示符。
这条命令与Shell异步运行,即在前台运行,用户在完成之前不能执行另一个命令。
后台进程:
在Shell提示处打入命令,若后随一个&,Shell创建的子进程运行此命令,但不等待命令退出,而直接返回到对用户给出提示。
这条命令与Shell同步运行,即在后台运行。
后台进程必须是非交互式的。
2.进程管理命令
查看用户信息
# w
JCPU: 以终端代号来区分,该终端所有相关的进程执行时,消耗的CPU时间
PCPU: CPU执行程序耗费的时间
WHAT: 用户正在执行的操作
from: 显示用户从何处登录系统,":0" 代表用户从X Window登录。
IDLE: 用户闲置时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置。
load average: 在过去的第1、第5、第15分钟,系统的平均负载程度。
查看个别用户信息
# w 用户名
查看系统中的进程信息
pgrep 查看进程号
# pgrep smbd
# pgrep smbd
ps
ps -u or l //查看隶属于自己进程详细信息
ps -uU xily //查看系统中指定用户执行的进程
ps -le | more 查看所有用户执行的进程的详细信息
ps -aux 查看所有用户执行的进程的详细信息
ps -aux --sort pid 按照进程PID对进程进行排序
ps aux --sort pid
ps aux --sort time
ps aux --sort rss 按照进程占用内存大小对进程进行排序
cat /proc/进程ID/status VmRSS对应的值就是物理内存占用
字段 说明
VmPeak 进程所使用的虚拟内存的峰值
VmSize 进程当前使用的虚拟内存的大小
VmLck 已经锁住的物理内存的大小(锁住的物理内存不能交换到硬盘)
VmHWM 进程所使用的物理内存的峰值
VmRSS 进程当前使用的物理内存的大小
VmData 进程占用的数据段大小
VmStk 进程占用的栈大小
VmExe 进程占用的代码段大小(不包括库)
VmLib 进程所加载的动态库所占用的内存大小(可能与其它进程共享)
VmPTE 进程占用的页表大小(交换表项数量)
VmSwap 进程所使用的交换区的大小
ps aux | sort -k4,4nr | head -n 10 查看内存占用排名前十的进程
ps aux | grep java | grep -v grep | sort -k4,4nr | head -n 10
ps -ef | grep mysql
ps -ef | grep 'java -jar faceFinal.jar' | grep -v grep | cut -c 9-15 | xargs kill -9
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
"xargs kill -9" 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
进程树
pstree
pstree | more
查看线程树
pstree -p 24864
pstree -p
kill
kill PID //关闭进程
kill -l //查看信号值
kill -9 PID //强行关闭 service network stop
kill -1 PID //重启进程 service network restart
killall java //结束所有java进程
killall httpd
xkill{} //关闭图形程序
* pgrep mysql //查询服务进程的PID
* pkill mysql 等同于 kill -9 'pgrep mysql' //关闭进程
优先级命令(优先级取值范围: -20,19 //数字越小,优先级越高)
程序启动的时候指定优先级
nice
nice -n command
nice --5 /etc/rc.d/init.d/mysql start
改变一个正在运行的进程的优先级
renice
renice n pid
renice -5 8934
后台进程
nohup
在用户退出登录后,进程仍旧继续执行
nohup命令将执行后的数据信息和错误信息默认存储到文件nohup.out中
格式:
nohup program &
nohup find / -name init* > /root/find.init.20160501 &
nohup java -DlistenPort=8999 -DserviceRespRequested=true -Dlog4j.root=/home/ntlog/nettyServer -jar /home/artifacts/nettyserver_jar/nettyserver.jar > /dev/null &
nohup java -DclientId=web01 -DgroupId=AAA -DserverIP=127.0.0.1 -DserverListenPort=8999 -DserviceRespRequested=true -Dlog4j.root=/home/ntlog/springboot -jar /home/artifacts/springboot_jar/springboot.jar > /dev/null &
进程的中止(挂起)和终止
挂起 (Ctrl+Z)
终止 (Ctrl+C)
查看被挂起(或后台运行)的进程
jobs{}
进程的恢复
fg 1 //恢复到前台继续运行
bg 1 //恢复到后台继续运行
显示系统使用量(Tasks、Cpu(s)、MeM、Swap)
top
作用:进程状态显示和进程控制,每5秒钟自动刷新一次
常用选项:
- d //指定刷新时间间隔
- c //显示整个命令行而不仅仅显示命令名
- u //查看指定用户的进程
- k //终止执行中的进程
- h or ? //获得帮助
- r //重新设置进程的优先级
排序:
- P:按%CPU使用率排行
- T:按MITE+排行
- M:按%MEM排行
top -p 进程ID
PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称
3、计划任务
安排作业在某一时刻执行一次
at
功能:安排一个或多个命令在指定的时间运行一次
命令格式及参数:
at 时间
at now +5 minutes
at> /usr/bin/wall < /etc/issue
at>
Ctrl+D 保存
at [-f 文件名] 时间
at -f at.script 9:00 2/2/11
at < at.script 9:00 2/2/11
at -d or atrm //删除队列中的任务
at -l or atq //查看队列中的任务
/etc/at.allow
/etc/at.deny
/etc/rc.d/init.d/atd start
命令(写绝对路径)
安排作业在系统负载不重时执行一次。一般情况下负载较轻指平均负载降到0.8以下
batch 使用方法同 at
cron 安排周期性运行的作业
crontab{ //用于生成cron进程所需要的crontab文件
crontab{-l|-r|-e}
-l //显示当前的crontab
-r //删除当前的crontab
-e //使用编辑器编辑当前的crontab
# crontab -e
知道的具体时间添上,不知道的都添上*
格式:
Minute hour day-of-month month-of-year day-of-week commands
分 时 日 月 周 命令/脚本
30 17 * * 1-5 /usr/bin/wall < /etc/issue
45 17 * * 1-5 /sbin/shutdown -h now
*/2 12-14 * 3-6,9-12 1-5 /bin/cp -r /etc /backup/etc.20160512 2> /backup/etc.bak.error >/dev/null
(每隔2分钟)
# nohup java -jar /home/face/jar/faceFinal.jar >/dev/null &
example{
1、编辑crontab
$ crontab -e
30 7 * * * /usr/bin/nohup /usr/java/jdk1.7.0_79/bin/java -jar /home/sun/test.jar > /home/sun/test.log
0 6 * * * /usr/bin/nohup /usr/java/jdk1.7.0_79/bin/java -jar /home/face/jar/face.jar > /dev/null &
0 20 * * * /bin/ps -ef|/bin/grep '/usr/java/jdk1.7.0_79/bin/java -jar /home/face/jar/face.jar'|/bin/grep -v grep|/bin/cut -c 9-15|/usr/bin/xargs /bin/kill -9
0 20 * * * /usr/bin/pgrep '/usr/java/jdk1.7.0_79/bin/java -jar /home/face/jar/face.jar'|/usr/bin/xargs /bin/kill -9 //not tested
2、查看crontab
# cat /var/spool/cron/sun
or
$ crontab -l
3、运行定时任务
$ /etc/rc.d/init.d/crond start
# systemctl status crond
# vim /etc/crontab
限制哪些用户可以使用crontab命令
/etc/cron.allow
/etc/cron.deny
4.进程处理方式
standalone //独立运行
xinetd/inetd //进程托管
atd、crond //计划任务
5.service
systemctl list-unit-files | grep sshd
systemctl list-units | grep running
systemctl list-units | grep 22
systemctl status kubelet -l
systemctl status docker -l
/etc/systemd/system/
/etc/systemd/system/docker.service.requires/
/etc/systemd/system/multi-user.target.wants/
/usr/lib/systemd/system/
开机自启动
chmod a+x /etc/rc.d/rc.local
systemctl enable rc-local
6.lsof
lsof -p 6 | grep TCP
java 6 root 10u IPv4 159677845 0t0 TCP diamond-dt-7b6987f895-ctlz4:webcache->10-244-0-20.ingress-nginx.ingress-nginx.svc.cluster.local:54856 (ESTABLISHED)
java 6 root 19u IPv4 145470311 0t0 TCP *:webcache (LISTEN)
java 6 root 30u IPv4 159687236 0t0 TCP diamond-dt-7b6987f895-ctlz4:webcache->10-244-0-20.ingress-nginx.ingress-nginx.svc.cluster.local:56640 (ESTABLISHED)
java 6 root 31u IPv4 159686808 0t0 TCP diamond-dt-7b6987f895-ctlz4:webcache->10-244-0-20.ingress-nginx.ingress-nginx.svc.cluster.local:56636 (ESTABLISHED)
java 6 root 35u IPv4 145472668 0t0 TCP diamond-dt-7b6987f895-ctlz4:59674->ip-172-37-100-41.cn-northwest-1.compute.internal:mysql (ESTABLISHED)
java 6 root 36u IPv4 155274804 0t0 TCP diamond-dt-7b6987f895-ctlz4:36530->mysql.xily-ns.svc.cluster.local:mysql (ESTABLISHED)
java 6 root 37u IPv4 145472671 0t0 TCP diamond-dt-7b6987f895-ctlz4:59916->172.35.201.22:mysql (ESTABLISHED)
java 6 root 41u IPv4 153719885 0t0 TCP diamond-dt-7b6987f895-ctlz4:54008->ip-172-37-101-41.cn-northwest-1.compute.internal:mysql (ESTABLISHED)
java 6 root 45u IPv4 159669737 0t0 TCP diamond-dt-7b6987f895-ctlz4:webcache->10-244-0-20.ingress-nginx.ingress-nginx.svc.cluster.local:53278 (ESTABLISHED)