Linux_进程管理_process_status_1

1、进程介绍

1、进程的概念

    1、进程:硬盘将数据读取到内存,cpu取代码运行的过程 资源单位
	    程序运行的过程
		进程是操作系统最核心的概念		   
    2、线程:执行单位,一个进程中运行的程序。
		多进程多线程,一个进程中可以同时运行多个线程		
	3、并发:  多个进程看起来像是同时运行,他是多道技术的由来 cpu
	    空间上的复用:程序存放在内存空间物理隔离,
		时间上的复用:cpu在多个进程中来回切换		  	   
	4、并行:实际并行的数量
		4核8线程 		  
	#cpu时运行代码       内存硬盘是运行io	
	5、程序运行的多个状态,运行态、就绪态、阻塞态	 
	   同步与异步的概念
	   他是提交任务的方式、同步即执行程序后,cpu会等程序执行完成后,再处理其他事、
	   异步执行程序,立即去处理其他事情,程序处理完,会发一个信息给到cpu
	6、同一个程序可能对应多个程序 父进程:程序运行时产生的第一个进程:由父进程衍生fork()出来的进程 注意:如果父进程终止,子进程也会随之被终止。

2、进程的状态STAT(R、S、D、T、Z、X)

linux下的进程状态
       R \运行态  #如果计算机只有一个处理器,那么一次最多只有一个进程处于这种状态。
        fp:vim a.sh (a.sh里面的程序为 while true;do((1+3));done)   
            sh a.sh
            ps aux | grep a.sh #查看状态为R+
            
       S \可中断睡眠sleep,即在睡眠的过程中可以接收信号唤醒=》执行的IO操作可以得到硬件设备的响应。
        fp:vim b.sh (b.sh里面的程序为 while true;do((1+3));sleep 1 ;done)   
            sh b.sh
            ps aux | grep b.sh #查看状态为s+ (实际上b.sh程序有R状态,cpu处理很快。)
            
       D \不可中断睡眠。即在睡眠的过程中可以接收信号唤醒=执行的IO操作可以得不到硬件设备的响应。
        fp:tar czf /root/egon.tar.gz /root/ /opt/  #将数据打包到egon.tar.gz
            ps aux | grep tar #硬件太忙了,没有时间去处理其他事,就会出现此现象。不可强制中断
            
       T \停止的进程
        fp:vim a.txt #暂时不关闭 查看状态发现是S
           ctrl+z 中止vim程序后,再次查看状态发现是T
           
       Z \僵尸进程   zimbie
       
       X \死掉的进程(几乎看不见,因为死了就立即回收了)
       
       l \代表以线程的方式运行,即多线程
    	fp:vim a.py #里面的内容输入如下:
        	from threading import Thread
            import time
            import os

            def task():
                time.sleep(100)

            if __name__ == "__main__":
                print(os.getpid())
                for i in range(10):
                    t=Thread(target=task)
                    t.start()
            bash a.py
            ps aux | grep [a].py#或者换成a.py的pid号。
            状态:pts/0 Sl+  bash a.py
       | \管道符号代表多进程
    #跟上面的状态的组合
       < \程序的优先级最高
        fp:nice 好心值 n范围-20 ~19 #n的值越大,优先级越低
		    nice -n -20 sleep 3000& #优先级高
	        nice -n 19 sleep 3000&
	        ps aux | grep [s]leep 
	        
       N \代表此程序的优先级最低
       
       s \进程包含子进程
        fp:ps aux | grep nginx
       里面的内容有:nginx:master prosess
        		   nginx:worker process
       + \前台的进程组

3、进程状态切换

	进程在运行中不断的改变状态:
        1、就绪状态
        当进程已分配到除CPU以外的所有必要的额资源,只要获得处理便可立即执行,这时的进程状态称为就绪状态
        2、执行状态running
        当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态
        3、阻塞状态blocked
    正在执行的过程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种。例如,等待IO完成,申请缓冲区不能满足,等待信号等
        就绪=》执行
        处于就绪状态的进程,当调度器为其分配了处理机后,就变成了执行状态
        执行=》就绪
        执行状态的进程在其执行过程中,时间片跑完了不得不让出处理机,于是从执行变成就绪态。
        执行=》阻塞
        正在执行的进程等待某种时间无法继续执行时,便从执行状态变成阻塞状态
        阻塞=》就绪
        处于阻塞态的进程,如果等待的时间发生,则从阻塞态变成就绪态

2、查看进程

1、ps aux

1、ps aux是常用组合,查看进程用户、PID、占用CPU百分比、占用内存百分比、状态、执行命令等。
        -a #显示一个终端的所有进程
        -u #选择有效的用户id或者用户名
        -x #显示没有控制终端的进程,同时显示各个命令的具体路径
        [root@localhost ~]# ps aux |head -5
    查看结果显示
        USER:运行进程的用户
        PID:进程ID
        %CPU:cpu占有率
        %MEM:内存占有率           =》 memory size
        VSZ:占用虚拟内存,单位:kb  =》virtual memory size =与swap没有关系
        RSS:占用实际内存,单位:kb  =》Resident(居民) Set Size
        TTY:进程运行的终端 Teletypewriter
        STAT:进程状态
        TIME:进程占用CPU的总时间
        COMMAND:进程文件、进程名
                带[]号的代表内核态进程
                不带[]代表用户态进程

2、查看进程树

		yum install psmisc #先安装pstree
    	[root@egon ~]# rpm -qf `which pstree`
        psmisc-22.20-16.el7.x86_64
        [root@egon ~]# pstree
        [root@egon ~]# pstree 104239
        bash-bash-bash-bash-pstreerpm  

3、查看ppid

		ps -elf | grep nginx 
       #Executable and Linking Format是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。

4、动态的查看top

# while true;do (ps aux);sleep 1;done
		top #默认3s刷新一次
    	top -d 1 #1s刷新一次
        top -d 1 -p #进程的pid
        top -d 1 -p `pgrep nginx | head -1`
        top -d 1 -p `pgrep sshd | head -1`,33 #查看sshd以及pid为33的进程
        top -d 1 -u egon #查看指定用户进程
        top -b -n 2 > top.txt #将2次top信息写入到文件
      fp:su - egon -c "sleep 1000" &
    	  ps aux | grep egon #可以查看egon用户下运行的程序 2个命令 
          pgrep -l -u egon   #只查看egon用户启动的程序 sleep命令

5、windows 系统中查看进程

  tasklist | findstr + 某一个进程         

6、top显示信息解释

	第一部分:系统整体统计信息
    load average 0.86.0.56.0.78 cpu平均1分钟的平均负载
    us用户态进程占用cpu时间的百分比 user
    sys 内核态进程占用cpu时间的百分比 
    ni 代表优先被调度的进程占用的cpu时间的百分比 nice
    id cpu空闲的百分比 idel空闲的
    wa cpu等待io的百分比 wait io
    hi 硬件中断,处理硬件中断所占用cpu的时间 hard
    si 软件中断,处理软件中断占用cpu的时间  soft
    st 被偷走的cpu steal 
    
    #什么是中断?
	中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的终端处理程序来影响设备的请求。
	
    #系统的软中断:
    第一阶段:用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关工作
    第二阶段:用来延迟处理第一阶段未完成的工作,通常以内核线程的方式运行。
    fp:第一阶段:当你接到第一个配送员电话时,你可以跟他说,你已经知道了,其他事见面再细说,然后就可以挂断电话了。
        第二阶段:才是取外卖,然后见面聊发票的处理动作。
        如此一来,第一个配送员不会在电话里占用你很长时间,第二个配送员来的时候,照样可以打通电话
  #https://www.cnblogs.com/linhaifeng/articles/13916102.html
  
	#平均负载
	平均负载是指,单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。
    假设现在在一个4、2、1核的cpu上,如果平均负载为2是意味着什么?
    	核心数   平均负载   含义
        4         2       有一半的cpu是空闲的状态
        2         2        cpu刚好完全占满内存
        1         2        至少一半的进程抢不到cpu
    #1、fp:使用while true ;do ((1+1));done & 执行多个循环语句
           观察cpu的负载情况,由于程序只进行数学运算。发现很快cpu就会被占满
    #2、fp:fp:使用while true ;do ((1+1));sleep 1;done & 执行多个循环语句
           观察cpu的负载情况,cpu有sleep等待,可以运行多个循环。
    #3、也可以使用stress工具来取代上述的while命令
        stress是linux系统压力测试的工具,可用作异常进程模拟平均负载升高的场景,yum inatall stress -y
        stress --cpu 4 --timeout 3000 #3000代表持续执行3000秒
   # 4、安装yum install sysstat -y 会得到下述两个命令
       mpstat 是多核cpu性能分析工具,用来实时检查每个cpu的性能指标,以及所有cpu的平均指标。
        mpstat -P ALL 3 #3s输出一组所有指标
        pidstat 是一个常用的进程性能分析工具,用来实时查看进程的cpu,内存,IO,以及上下文切换等性能指标。
        pidstat -u 1 5 #1秒一次,总共输出5次。

7、查看进程状态

		命令行选项
			top -d 刷新时间s -p pid  # 只看某一个进程的信息
			top -d 刷新时间s -u 用户  # 只查看该用户开启的所有进程信息		
		内部命令
			s # 修改刷新时间,单位是秒,可以是0.001s,建议不要设置很小,否则会过度消耗cpu
			q # 退出 或者ctrl+c			
			排序:
				M 按照内存占用率从大到小排序
				P 按照cpu占用率从大到小排序
				N 按照PID从大到小排序				
			    配合R代表倒序				
				shift + > # 移动排序字段 
				shift + < # 移动排序字段 		
				按上下键查看所有进程				
			f 增加显示字段 
			k 给进程发信号 kill进程
			数字1 :显示所有cpu的信息
            z 高亮显示

3、shell管理进程

1、优先级设置

	可以在启动进程时用nice命令设置优先级
    1、命令 
    nice -n<优先级> [--help][--verdsion][执行命令]
   2、PRI:代表这个进程可被执行的优先级,其值越小越早被执行
      NI:代表这个进程的nice值
    PRI即进程的优先级,此值越小进程的优先级别越高。而NI,就就是我们所说的nice值。其表示进程可被执行的优先级的修正数值。如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变成“PRI(new)=PRI(old)+nice。
    所以,nice命令设置的优先级不是程序最终的优先级,而只是优先级的修正数值。
    renice命令允许用户修改一个正在运行的进程的优先权。
    对已运行的进程设置新的优先级
    renice -20 11111

2、给进程发送信号

	kill -l # 列出所有支持的信号
    #1、HUP 1、挂起信号 2、进程重新加载配置
    本信号在用户终端连接(正常或非正常)结束发出,通常是在终端的控制进程结束时,通知同一session内的各个作业,这是他们与控制终端不再关联。
    登录linux时,系统会分配给登录用户一个终端(session)。在这个终端运行的所有的程序,包括前台进程组合后台进程组,一般属于这个session。当用户退出linux登录时,前台进程和后台有对终端输出的进程将会收到SIGHUP信号。
    1、这个信号的默认操作为终止程序,前后台的进程都会中止。不过,可以捕获这个信号,比如wget能捕获SIGHUP信号、并忽略它,即使退出了linux登录,wget也能继续的下载。
    
    2、此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。
    #INT(2):中断,通常因为按下ctrl+c而产生的信号,用于通知前台进程组终止进程。
    #QUIT(3):退出,和SIGINT类似,但由QUIT字符(通常是ctrl-\)来控制,进程因收到SIGQUIT退出时会产生core文件,这个意思类似于一个程序错误信号。
    #TSTP(20):停止运行,通常按ctrl+z而产生的信号
    
	#2、kill(9)
	用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。
	
	#3 TERM(15)
	终止,是不带参数时kill默认发送的信号,默认是杀死进程,与SIGKILL不同的是该信号可以被阻塞和处理。通常用TERM信号来要求程序自己正常退出,如果进程终止不了,我们才会尝试SIGKILL.
        # CONT(18)被暂停的进程将继续恢复运行
        # SIGFTOP(19) 暂停进程
        # SIGCHLD 子进程结束时,父进程会收到这个信号
	如果父进程没有处理这个信号,也没有等待(wait)子进程。子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程为僵尸进程这种情况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉他,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自由由init(systemd)进程来接管。

(1)kill -1 重新加载配置文件
	1、先启动vfstpd服务
     systemctl start vfstpd #默认匿名用户共享根目录/var/ftp
     ls /var/ftp   #可查看到里面有一个pub文件
     
    2、打开浏览器,输入,ftp//:192.168.12.54/,可以看到的是/var/ftp下的内容
    
    3、修改vfstpd的配置文件,默认匿名用户共享目录改为/test
   sed -i '$a anon_root=/test'/etc/vsftpd/vsftpd.conf 或者 echo 'anon_root=/test' >>/etc/vsftpd/vsftpd.conf 
   
	4、在不启动服务vsftp的情况下让其加载配置文件
    ps aux | grep [v]sftpd #可以查看到此时的pid号
    kill -1 pid
    ps aux |grep [v]sftpd #发现两次的pid不变
    
    5、打开浏览器,重新输入ftp//:192.168.12.54/,看到的是/test下的内容。
        
(2)kill 杀死进程 # kill -15 可以不加-15,默认发出的就是-15信号  
     ps aux |grep [v]sftpd #可以看到50695
     kill 50695
     ps aux |grep [v]sftpd
     #kill -9强制杀死
	
(3)kill -19 暂停进程与kill -18恢复进程
	vim a.txt #进入编辑界面
    ps aux | grep [v]im #pid
    kill -stop pid
    ps aux | grep [v]im #pid
    kill -cont pid pid
     
(4)杀死所有:根据进程名杀所有
    vim egon.txt &
    vim egon.txt &
    vim egon.txt &
    pkill -9 vim #killall -9 vim
(5)查看某个用户的进程
	pgrep -l -u egon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I believe I can fly~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值