Linux知识心得18 Linux 进程管理

进程管理

1、复习

1、介绍

	程序:由一堆源代码组成的安装包
	进程:程序运行的过程

2、查看进程命令(ps)
	格式:
		1、ps -aux : 主要查询经常状态,CPU使用率,内存使用率
		2、ps -ef  : 主要查询PPID 

3、进程状态

	S : 可中断睡眠
	D :不可中断睡眠
	R :正在运行状态
	T :暂停状态
		kill -SIGSTOP
		kill -SIGCONT
	Z : 僵死状态
	s :  包含子进程
	l :  多线程状态
	+ :  前台运行
	< : 优先级较高
	N :优先级较低
	
	nice值介绍:
	ps:优先级设置:阔以在启动进程时用nice命令设置优先级。
		命令:nice [-n <优先级>] [--help] [--version] [执行指令]
		[root@ljl ~]# nice -n 1 sleep 10 &
		NICE:在LINUX系统中,Nice值的范围从-20到+19(不同系统的值范围是不一样的),正值表示低优先级,负值表示高优先级,值为零则表示不会调整该进程的优先级。
		也可以对已运⾏的进程设置新的优先级
         [root@ljl ~]# renice -5 100185
         100185 (process ID) old priority 0, new priority -5

	例1:统计系统中处于可中断睡眠的进程有多少个?
		[root@localhost ~]# ps -aux | awk 'NR>1{print $8}' | grep 'S' | wc -l
		94

2、系统进程信号

发送信号的命令(kill)

1、获取系统所有信号
[root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

# HUP(1): 

	1、挂起信号
    
        [root@localhost ~]# cat test.sh 
        #!/bin/bash
        # $$ : 当前进程PID号 
        echo $$
        sleep 1000

		[root@localhost ~]# kill -SIGHUP 21870
    
	2、让进程重新加载配置
		1、安装nginx
			yum install nginx -y
		2、启动Nginx
			systemctl start nginx
		3、修改配置文件
			vim /etc/nginx/nginx.conf
		4、执行重载信号
			kill -SIGHUP [PID] 

# INT(2): 中断, 通常因为按下ctrl+c⽽产⽣的信号,⽤于通知前台进程组终⽌进程。
 
 trap : 捕捉信号
 	格式:
 		trap '执行脚本' [信号](注:无法执行过于复杂的命令,一般情况下建议使用脚本)
 		[root@ljl ~]# cat trap.sh 
         #!/bin/bash
         trap 'echo xxx' INT
         echo $$
         sleep 100
         [root@ljl ~]# sh trap.sh 
         102531
         ^Cxxx

# QUIT(3): 退出,和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产⽣core⽂件, 在这个意义上类似于⼀个程序错误信号。	
# TSTP(20): 停⽌进⾏运⾏,通常因为按下ctrl+z⽽产⽣的信号

# KILL 杀死进程
# TERM 停止进程

# CONT(18) 恢复运⾏
# SIGSTOP(19) 暂停进程

HUP  : 重载配置
TERM : 停止进程

注:所有信号都能被trap命令捕捉到,但是KILL信号是无法捕捉。

3、查看⽹络状态

1、查看Linux系统中有哪些端口被监听?
80 : web服务器
3306 : 数据库
6379 : redis
1194 : vpn
22 : ssh
21 : ftp

[root@localhost ~]# netstat -tulpn

1、统计当前系统使用那些端口?
netstat -lntpu | awk 'NR>2{print $4}' | awk -F: '{print $NF}' | sort | uniq 

4、proc文件系统

1、查看系统CPU详情
[root@localhost proc]# cat /proc/cpuinfo 

	例1:打印出系统的CPU核数
        [root@localhost proc]# cat /proc/cpuinfo | grep 'processor' | wc -l
        2
2、查看系统内存
[root@localhost proc]# cat /proc/meminfo 

	例1:计算出系统内存使用率
	#!/bin/bash
    MemTotal=`cat /proc/meminfo  | awk 'NR==1{print $2}'`
    MemFree=`cat /proc/meminfo  | awk 'NR==2{print $2}'`
    MemUser=`echo " $MemTotal - $MemFree " | bc`
    NUM=`echo " $MemUser * 100  / $MemTotal" | bc` 
    echo $NUM%

3、系统内核启动参数
	[root@localhost ~]# cat /proc/cmdline


5、后台启动

把运行在前台的应用运行在后台

1、nohup
	格式:
		nohup [启动命令] &

	注:nohup启动会产生一个文件:nohup.out, 用来记录nohup管理的命令的日志。

2、先暂停,后启动,使用bg fg方式启动运行
    [root@localhost ~]# sleep 5000 & # 运⾏程序(时),让其在后台执⾏
    [1] 31143
    [root@localhost ~]# sleep 4000 # ^z,将前台的程序挂起(暂停)到后台
    [root@localhost ~]# jobs # 中括号内的编号就是作业编号,%1代表作业1
    [1]- 运⾏中 sleep 5000 &
    [2]+ 已停⽌ sleep 4000
    [root@localhost ~]# bg %2 # 让作业2在后台运⾏
    [2]+ sleep 4000 &
    [root@localhost ~]# fg %1 # 将作业1调回到前台
    [root@localhost ~]# jobs
    [2]+ 运⾏中 sleep 4000 &
    [root@localhost ~]# kill %2

6、僵尸进程与孤儿进程

僵尸进程:进程已经结束但是还占领着PID
孤儿进程:父进程挂掉,子进程有系统进程接管

7、管道

什么是管道?
管道⽤于进程间通信
详细地说,管道操作符号 "|" ,主要⽤来连接左右两个命令, 将左侧的命令的标准输出, 交给右侧命令的标准输⼊
PS: ⽆法传递标准错误输出至后者命令
格式: cmd1 | cmd2 [...|cmdn]
[root@localhost ~]# ps aux |grep "httpd"
[root@localhost ~]# yum list |grep nginx
例2:统计当前/etc/passwd中⽤户使⽤的shell类型
    [root@localhost ~]# awk -F: '{print $7}' /etc/passwd | sort |uniq -c
    2 /bin/bash
    1 /bin/sync
    1 /sbin/halt
    40 /sbin/nologin
    1 /sbin/shutdown
例3: 统计⽹站的访问情况
	[root@localhost ~]# netstat -an |grep :80 |awk -F":" '{print $8}'|sort |uniq -c
例4: 打印当前所有IP
    [root@localhost ~]# ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'
    127.0.0.1
    192.168.12.21
    192.168.122.1
例5:打印根分区已⽤空间的百分⽐(仅打印数字)
    [root@localhost ~]# df -P|grep '/$' |awk '{print $5}'|awk -F"%" '{print $1}'
    50
例6: 统计⽹站的访问最多的ip top 10
    #思路: 打印所有访问的过来的ip | 排序 | 去重 | 倒序排序 | 取前10
    [root@egon ~]# awk '{print $1}' access.log |sort |uniq -c |sort -rn|head
    12049 58.220.223.62
    10856 112.64.171.98
    1982 114.83.184.139
 

	
	
posted @ 2021-07-15 18:46  虾虾78  阅读(120)  评论(0)    收藏  举报