系统进程

【1】、进程基本概述

当我们运行一个程序,那么我们将运行的程序叫进程

​ PS1:当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限

​ PS2:在进程运行的过程中,服务器上会有各种状态来表示当前进程的指标信息

程序和进程的区别

​ 程序是数据和指令的集合,是一个静态的概念,比如/bin/ls /bin/cp 等二进制文件,同时程序可以长期存在系统中

​ 进程是程序运行的过程,是一个动态的概念,进程是存在生命周期概念的,也就是说进程随着程序的终止而销毁,不会永久存在系统中

程序的生命周期

​ 一个对象从无到有、从有到无过程称为生命周期

当父进程接收到任务调度时,会通过fock派生子进程来处理,子进程会继承父进程衣钵(相当于完全复制了一份父进程的信息)

  1. 子进程在处理任务代码时,父进程会进入等待状态中,在一个进程中一般都是子进程去干活

  2. 子进程在处理任务代码后,会执行退出,然后唤醒父进程来回收子进程的资源

  3. 如果子进程在处理任务过程中,父进程退出,子进程没有退出,子进程没有被父进程管理,则变为僵尸进程

  4. 每个进程都有自己的PID号,子进程称为PPID

祖先进程

  1. pid=1的进程
  2. 在系统启动时,会首先启动一个祖先进程,在启动别的进程
root@xu-ubuntu:~/scripts# pstree -p
systemd(1)─┬─ModemManager(935)─┬─{ModemManager}(960) [root@kylin-xu ~]# pstree -p
systemd(1)─┬─NetworkManager(874)─┬─{NetworkManager}(882)

【2】、监控进程状态

程序在运行后,我们需要了解进程的运行状态,查看进程的状态分为:静态和动态两种方式

1、ps命令

使用ps命令查看当前的进程状态(静态)

ps –auxf常用组合方式查看进程、PID、占用cpu百分比,占用内存百分比,状态、执行的命令等

  • -a 显示所有终端机下执行的进程,除了阶段作业领导者之外
  • -u 以用户为主的格式来显示进程状况
  • -x 显示所有进程,不以终端机来区分
  • -f 用ASCII字符显示树状结构,表达进程间的相互关系

标志 意义
USER 该 process 属于那个使用者账号的
PID 该 process 的号码
%CPU 该 process 使用掉的 CPU 资源百分比
%MEM 该 process 所占用的物理内存百分比
VSZ 该 process 使用掉的虚拟内存量 (Kbytes)
RSS 该 process 占用的固定的内存量 (Kbytes)
TTY 该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT 该程序目前的状态
START 该 process 被触发启动的时间
TIME 该 process 实际使用 CPU 运作的时间
COMMAND 该程序的实际指令[]内核态进程 无[] 用户进程
STAT基本状态 描述 STAT状态+符号 描述
R 进程运行 s 进程是控制进程, Ss进程的领导者,父进程
S 可中断睡眠 < 进程运行在高优先级上,S<优先级较高的进程
T 进程被暂停 N 进程运行在低优先级上,SN优先级较低的进程
D 不可中断睡眠 + 当前进程运行在前台,R+该表示进程在前台运行
Z 僵尸进程 l 进程是多线程的,Sl表示进程是以线程方式运行
案例1:
1)在终端1上运行vim
vim test
2)在终端2上运行ps命令查看状态
[root@kylin-xu ~]# ps aux | grep vim
root 434314 0.2 0.3 227272 6960 pts/1 S+ 18:27 0:00 vim test.txt
3)在终端1上挂起vim命令按下: ctrl+z
4) 回到终端2再次运行ps命令查看状态
[root@kylin-xu ~]# ps aux | grep vim
root 434314 0.0 0.3 227272 6960 pts/1 T 18:27 0:00 vim test.txt
案例2
PS命令查看不可中断状态进程
使用tar打包文件时,可以通过中断不断查看状态,由S+,R+变为D+
[root@xu ~]# ps axu|grep tar|grep -v grep
root 14289 2.6 0.1 124268 1888 pts/2 S+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@xu ~]# ps axu|grep tar|grep -v grep
root 14289 2.7 0.2 124380 2240 pts/2 R+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var
[root@xu ~]# ps axu|grep tar|grep -v grep
root 14289 2.9 0.2 124916 2724 pts/2 D+ 10:56 0:01 tar zcf etc.tar.gz /etc/ /usr/ /var

2、top命令

使用top命令查看当前的进程状态 动态

任务 含义
Tasks:73 total 当前进程的总数
2 running 正在运行的进程数
71 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
%Cpu(s): 49.2 us 系统用户进程使用CPU百分比
5.7 sy 内核进程占用CPU百分比,内核是于硬件进行交互
ni 调整过优先级进程占用百分比
45.2 id 空闲CPU的百分比
0.0 wa CPU等待IO完成的时间
0.0 hi 硬中断,占的CPU百分比
0.0 si 软中断,占的CPU百分比
0.0 st 比如虚拟机占用物理CPU的时间

什么是中断?

中断就是终止当前在做的事情 去执行另一段程序

会保留现场,执行的那段程序做完之后会在回来执行刚来尚未完成的部分

软中断和硬中断的区别

软中断 硬中断
是否有随机性 突发性
是否有中断响应周期
中断类型号的提供方法 固定或由指令提供 由中断控制器提供,硬件提供

【3】、管理进程状态

当程序运行为进程后,如果希望停止进程,怎么办呢?那么此时我们可以使用linux的kill命令对进程发送关闭新号,当然除了kill 还有killall pkill

使用kill –l列出当前系统所支持的信号

虽然Linux信号很多,但是我们仅仅使用最常用的3个信号

1) SIGHUP 重新加载配置文件 1 不停机维护

2) SIGKILL 强制杀死进程 9 不管内存中是否有没有数据,直接杀进程,可能会丢文件,类似拔电源

3) SIGTERM 终止进程,默认kill使用该信号 15 如果内存中还有和当前进程相关的信息,将内存中的信息写入磁盘后,在杀死进程

[root@kylin-xu ~]# ps -ef | grep httpd
root 272889 1 0 06:45 ? 00:00:03 /usr/sbin/httpd -DFOREGROUND
apache 272972 272889 0 06:45 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 272973 272889 0 06:45 ? 00:00:11 /usr/sbin/httpd -DFOREGROUND
apache 272974 272889 0 06:45 ? 00:00:12 /usr/sbin/httpd -DFOREGROUND
apache 272975 272889 0 06:45 ? 00:00:11 /usr/sbin/httpd -DFOREGROUND
[root@kylin-xu ~]# kill -9 272889
[root@kylin-xu ~]# ps aux | grep httpd
# 修改httpd端口,使用kill -1 重新加载,不停机维护
root@kylin-xu ~]# ss -tunlp | grep httpd
tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=470759,fd=4),("httpd",pid=470758,fd=4),("httpd",pid=470757,fd=4),("httpd",pid=470213,fd=4)) vim /etc/httpd/conf/httpd.conf [root@kylin-xu ~]# kill -1 470213
[root@kylin-xu ~]# ss -tunlp | grep httpd
tcp LISTEN 0 128 *:8080 *:* users:(("httpd",pid=471610,fd=9),("httpd",pid=471609,fd=9),("httpd",pid=471608,fd=9),("httpd",pid=470213,fd=9))

killall命令

# 可以根据进程名字杀死进程
[root@kylin-xu ~]# killall httpd
[root@kylin-xu ~]# ps -ef | grep httpd
root 474240 430910 0 19:41 pts/1 00:00:00 grep httpd

pkill命令

    使用pkill踢出从远程登录到本机的用户,终止pts1上所有进程,用户强制退出
[root@lzy ~]# pkill -9 -t pts/1

【4】、后台进程

1、临时后台进程

1) 什么是后台进程

​ 运行的进程默认在终端前台运行,一旦关闭终端,进程随着结束,此时希望进程在后台运行不退出,这样关闭终端也不影响进程的正常运行

2) 如何把程序放在后台

# 把进程放入后台运行 使用 &
[root@kylin-xu ~]# sleep 5000 &
[1] 480069
[root@kylin-xu ~]# ps aux | grep sleep
root 480069 0.0 0.0 212380 760 pts/1 S 19:54 0:00 sleep 5000
root 480151 0.0 0.0 213156 892 pts/1 R+ 19:54 0:00 grep sleep # jobs查看后台进程
[root@kylin-xu ~]# jobs
[1]+ 运行中 sleep 5000 & # 调回前台执行
[root@kylin-xu ~]# fg %1
sleep 5000 # ctrl + c 终止 # CTRL + z 后台停止,bg 进程在后台执行
[root@kylin-xu ~]# sleep 5000
^Z
[1]+ 已停止 sleep 5000
[root@kylin-xu ~]# bg %1
[1]+ sleep 5000 &

放入后台的进程,如果再终端断开连接后 ,重新连上进程会消失,我们现在不想让他消失

2、持久化后台进程

screen的使用 常用

screen的原理:开辟一个新的bash space ,将进程放入新的 bash space 中,

yum install -y screen

# 开创新的 bash ---- -S  bash空间名称
[root@kylin-xu ~]# screen -S wget_install
# 进入了screen 开辟的新的bash,在新的bash中执行命令,就相当于在后台执行命令了
[root@kylin-xu ~]# sh 1.sh # ctrl +a+d 表示退出当前bash空间,放入后台,会到前台
[root@kylin-xu ~]# ps aux | grep wget
root 491586 0.0 0.1 228240 2360 ? Ss 20:27 0:00 SCREEN -S wget_install
root 491633 1.0 0.6 227348 12832 pts/1 S+ 20:27 0:01 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate # 通过screen创建的后台进程在断开终端后也会正常执行
ctrl + d,重连终端,进程依旧存在
[root@kylin-xu ~]# ps aux | grep wget
root 491586 0.0 0.1 228240 2360 ? Ss 20:27 0:00 SCREEN -S wget_install
--list:查看当前有哪些bash空间
[root@kylin-xu ~]# screen -list
There is a screen on:
491586.wget_install (Detached)
1 Socket in /run/screen/S-root. -r:进入指定的bash space ,可以通过进程号或bash space name
[root@kylin-xu ~]# screen -r 491586

nohup

[root@kylin-xu ~]# nohup sleep 300 &
[1] 494330

【5】、进程优先级

1) 在启动进程时,为不同的进程使用不同的调度策略

  • nice 值越高 表示优先级越低,例如+19 该进程容易将CPU使用量让给其他进程
  • nice值越低 表示优先级越高,例如-20, 改进程更不倾向于让出CPU

使用top或ps敏玲查看进程的优先级

使用top可以查看nice优先级 NI:实际nice级别,默认是0 动态修正CPU调度。范围(-20~19)。越大,cpu调度越一般,越小,cpu调度越偏向它。一般用于后台进程,调整也是往大了调,用来给前台进程让出CPU资源

PR: 优先级 显示nice值,PR默认是20,越小,优先级越高。修改nice可以同时修改PR -20映射到0, +19映射到39

nice指定程序的优先级,语法格式nice -n 优先级数字 进程名称

Linux系统进程的更多相关文章

  1. Linux系统进程管理

    Linux系统进程管理 什么是进程 进程是已启动的可执行程序的运行实例,进程有以下组成部分: 分配内存, 已分配内存的地址空间 安全属性, 进程的运行身份和权限 进程代码, 运行一个或多个的线程 进程 ...

  2. linux系统进程的查看与控制

    原文:linux系统进程的查看与控制 一.什么是进程? 进程就是系统未完成并且正在进行的工作. 二.查看系统进程 1.图形方式查看 gnome-system-monitor 2.进程查看命令 ps - ...

  3. [转帖]Linux系统进程的知识总结,进程与线程之间的纠葛...

    Linux系统进程的知识总结,进程与线程之间的纠葛... https://cloud.tencent.com/developer/article/1500509 当一个程序开始执行后,在开始执行到执行 ...

  4. Linux 系统进程相关命令

    1.pstree  :可以使用pstree命令来查看系统中进程的分布结构. 2.ps: 常用于查看系统进程的命令是ps(process status)命令,可通过它来查看系统进程的最基本信息. ●-A ...

  5. linux系统进程的内存布局

    内存管理模块是操作系统的心脏:它对应用程序和系统管理非常重要.今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕.由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Lin ...

  6. linux 系统进程理解

    1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行.      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...

  7. Linux系统进程的知识总结,进程与线程之间的纠葛...

    来源:嵌入式ARM 当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程. Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行.我 ...

  8. 【转】Linux系统进程的知识总结,进程与线程之间的纠葛

    我们先打个比方,多线程是十字路口多线程是平面交通系统,造价低,但是红绿灯多,老堵车,而多进程是则是立交桥,虽然造价高,上下坡多耗油,但是不堵车.这是一个抽象的概念.相信大家看完会有这种感觉. 进程和线 ...

  9. Linux操作系统进程模型分析进程

    Linux操作系统简介 Linux拥有现代操作系统的功能,如真正的抢先式多任务处理,支持多用户内存,保护虚拟内存,支持SMP.UP,符合POSIX 标准联网.图形用户接口和桌面环境具有快速性.稳定性等 ...

  10. linux面试题

    一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取uu要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 ...

随机推荐

  1. pikachu靶场 越权(水平越权+垂直越权)

    水平越权 A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如果越权操作B用户个人信息的情况称为水行越权操作 三个用户 lucy/lili/kobe  密码都为123456 随便登录其 ...

  2. Java基础 韩顺平老师的 泛型 的部分笔记

    553,泛型引入 package com.hspedu.list_; import java.util.*; import java.util.concurrent.CompletionService ...

  3. vim命令之多行注释

    vim常用命令之多行注释和多行删除 vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率. 1.多行注释: 1. 首先按esc进入命令行模式下,按下Ctrl + v, ...

  4. ZEGO 自研客户端配置管理系统 —— 云控

    一.常规客户端配置的弊端 客户端配置信息通常会通过一个静态文件进行管理,或存放在本地或者通过远程获取.存在本地最大的问题是不易更新,所以通常做法是通过远程获取. 我们通过两种常见的场景来看看静态文件管 ...

  5. JS实现树形结构数据的模糊搜索查询

    简单示例: 需求:输入 "题2" 字,希望树形结构中带有 "题2" 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回. let arr = [ { ti ...

  6. reinstall nodejs 后跑不到 command

    现象 : node -v 可以跑 , ng new 这些就跑不到 (确保已经安装了 global cli) 那多半是 path 的问题 https://stackoverflow.com/questi ...

  7. C# + WPF 音频播放器 界面优雅,体验良好

    前言 本文介绍一款使用 C# 与 WPF 开发的音频播放器,其界面简洁大方,操作体验流畅.该播放器支持多种音频格式(如 MP4.WMA.OGG.FLAC 等),并具备标记.实时歌词显示等功能. 另外, ...

  8. 字节跳动的多平台绽放秘诀 | Flutter 开发者故事

    字节跳动旗下运营着一系列成功的用户产品.企业应用以及服务,覆盖信息.教育.娱乐等不同领域.随着产品阵容的不断发展,传统的原生双平台开发已经难以满足团队更高效.更灵活.更精美,以及更多样的产品研发需求. ...

  9. docker安装及基本的镜像拉取

    docker 使用存储库安装 卸载它们以及相关的依赖项. yum remove docker \ docker-client \ docker-client-latest \ docker-commo ...

  10. gadget驱动框架(二)

    usb_composite_driver的创建于注册 源码:drivers/usb/legacy/serial.c //创建usb_composite_driver static struct usb ...