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秒钟自动刷新一次

常用选项:

  1. d //指定刷新时间间隔
  2. c //显示整个命令行而不仅仅显示命令名
  3. u //查看指定用户的进程
  4. k //终止执行中的进程
  5. h or ? //获得帮助
  6. r //重新设置进程的优先级

排序:

  1. P:按%CPU使用率排行
  2. T:按MITE+排行
  3. 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)