Linux基础之进程及进程管理


xp5631758
xp 2022-09-27 09:54:14 50989
分类专栏: 资讯

进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

Linux进程

Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝。Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰。这个特殊的环境就称为进程。每个 Linux 命令都与系统中的程序对应,输入命令,Linux 就会创建一个新的进程。系统通过一个五位数字跟踪程序的运行状态,这个数字称为 pid 或进程ID。每个进程都拥有唯一的 pid。理论上,五位数字是有限的,当数字被用完时,下一个 pid 就会重新开始,所以 pid 最终会重复。但是,两个 pid 一样的进程不能同时存在,因为Linux会使用 pid 来跟踪程序的运行状态。

 

前台进程

默认情况下,用户创建的进程都是前台进程;前台进程从键盘读取数据,并把处理结果输出到显示器。我们可以看到前台进程的运行过程。例如,使用 ls -l 命令来遍历当前目录下的文件:


后台进程

后台进程与键盘没有必然的关系。当然,后台进程也可能会等待键盘输入。后台进程的优点是不必等待程序运行结束就可以输入其他命令。创建后台进程最简单的方式就是在命令的末尾加 &,例如:

前台任务和后台任务的切换

fg 命令可以将后台任务调到前台,语法为:fg jobnumber

jobnumber 是通过 jobs 命令获取的后台任务的的序号,注意不是pid。如果后台只有一个任务,可以不指定 jobnumber。

bg 命令可以将后台暂停的任务,调到前台继续运行,语法为:bg jobnumber

jobnumber 同样是通过 jobs 命令获取的后台任务的的序号,注意不是pid。如果前台只有一个任务,可以不指定 jobnumber。

如果希望将当前任务转移到后台,可以先 Ctrl+z 暂停任务,再使用 bg 命令。任务转移到后台可以空出终端,继续输入其他命令。

任务和进程

任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是多个进程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以由一个进程来实现,也可以由多个进程来实现。  每个任务都有一个数字表示的任务号。进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。

jobs 命令可以用来查看系统中正在运行的任务,包括后台运行的任务。该命令可以显示任务号及其对应的进程ID。一个任务可以对应于一个或者多个进程号。

jobs 命令的 -l 选项可以查看当前任务包含的进程ID

其中,第一列表示任务号,第二列表示任务对应的进程ID,第三列表示任务的运行状态,第四列表示启动任务的命令。

 

查看正在运行的进程

可以使用 ps 命令查看进程的运行状态,包括后台进程,例如:

还可以结合 -f 选项查看更多信息,f 是 full 的缩写.

每列的含义如下:

描述
UID进程所属用户的ID,即哪个用户创建了该进程。
PID进程ID。
PPID父进程ID,创建该进程的进程称为父进程。
CCPU使用率。
STIME进程被创建的时间。
TTY与进程有关的终端类型。
TIME进程所使用的CPU时间。
CMD创建该进程的命令。


ps 命令还有其他一些选项:

选项说明
-a显示所有用户的所有进程。
-x显示无终端的进程。
-u显示更多信息,类似于 -f 选项。
-e显示所有进程。

Centos5/6: init

Centos7: systemd

终止进程

当进程运行在前台时,可以通过 kill 命令或 Ctrl+C 组合键来结束进程。

如果进程运行在后台,那么首先要通过 ps 命令来获取进程ID,然后使用 kill 命令“杀死”进程,例如:

如上所示,kill 命令终结了 autofs 进程。

可以使用 pgrep 命令来进行进程过滤:

显示某一用户运行的所有进程:

 

父进程和子进程

每个 Linux 进程会包含两个进程ID:当前进程ID(pid)和父进程ID(ppid)。可以暂时认为所有的进程都有父进程。

由用户运行的大部分命令都将 Shell 作为父进程,使用 ps -f 命令可以查看当前进程ID和父进程ID。

使用 pstree 命令查看进程树:

僵尸进程和孤儿进程

正常情况下,子进程被终止时会通过 SIGCHLD 信号通知父进程,父进程可以做一些清理工作或者重新启动一个新的进程。但在某些情况下,父进程会在子进程之前被终止,那么这些子进程就没有了“父亲”,被称为孤儿进程

init 进程会成为所有孤儿进程的父进程。init 的 pid 为1,是Linux系统的第一个进程,也是所有进程的父进程。

如果一个进程被终止了,但是使用 ps 命令仍然可以查看该进程,并且状态为 Z,那么这就是一个僵尸进程。僵尸进程虽然被终止了,但是仍然存在于进程列表中。一般僵尸进程很难杀掉,你可以先杀死他们的父进程,让他们变成孤儿进程,init 进程会自动清理僵尸进程。

常驻进程

常驻进程一般是系统级进程,以 root 权限运行在后台,可以处理其他进程的请求。

常驻进程没有终端,不能访问 /dev/tty 文件,如果使用 ps -ef 查看该进程,tty 这一列会显示问号(?)。

更确切地说,常驻进程通常运行在后台,等待指定事件发生,例如打印进程是一个常驻进程,它会等待用户输入打印相关的命令并进行处理。

top命令

top 命令是一个很有用的工具,它可以动态显示正在运行的进程,还可以按照指定条件对进程进行排序,与Windows的任务管理器类似。

top 命令可以显示进程的很多信息,包括物理内存、虚拟内存、CPU使用率、平均负载以及繁忙的进程等。例如:

htop 是一个 Linux 下的交互式的进程浏览器,可以用来替换 Linux 下的 top 命令:

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控,对系统的整体情况进行统计。

字段说明:

Procs(进程):

  r: 运行队列中进程数量

  b: 等待IO的进程数量

Memory(内存):

  swpd: 使用虚拟内存大小

  free: 可用内存大小

  buff: 用作缓冲的内存大小

  cache: 用作缓存的内存大小

Swap:

  si: 每秒从交换区写到内存的大小

  so: 每秒写入交换区的内存大小

IO:(现在的Linux版本块的大小为1024bytes)

  bi: 每秒读取的块数

  bo: 每秒写入的块数

系统:

in: 每秒中断数,包括时钟中断。【interrupt】

cs: 每秒上下文切换数。        【count/second】

CPU(以百分比表示):

  us: 用户进程执行时间(user time)

  sy: 系统进程执行时间(system time)

  id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。

  wa: 等待IO时间

备注:

如果r经常大于4,id经常少于40,表示cpu的负荷很重。

如果bi,bo长期不等于0,表示内存不足。

如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。

Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。

强大的性能监测工具 dstat

dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具

dstat使用说明: 
直接使用 dstat,默认使用的是 -cdngy 参数,分别显示 cpu、disk、net、page、system 信息

CPU状态:CPU的使用率。显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。

磁盘统计(dsk):磁盘的读写操作,这一栏显示磁盘的读、写总数。

网络统计(net):网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。

分页统计(paging):系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。

系统统计(system):这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

 

默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL+C"键。

需要注意的是报告的第一行,通常这里所有的统计都不显示数值的。

 

dstat的参数详情

  • -c:显示cpu当前状态
  • -C:加cpu号分别显示cpu
  • -l:显示负载统计量
  • -m:显示内存状态包括used,buffer,cache,free
  • -n:显示网卡总状态
  • -nf:分页显示网卡装填
  • -r:显示i/o统计
  • -s:显示交换分区的状态
  • -t:显示时间
  • -fs:显示文件系统统计数据,包括文件总数和innodes值
  • -nocolor:输出不现实颜色
  • -socket:统计网络数据
  • -tcp:显示tcp统计
  • -udp:显示udp统计

 

定制时间和输出间隔,比如 dstat -nf 2 5 表示输出网络设备 2秒一次 一共输出5次

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux17938 人正在系统学习中

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10602
赞同 0
评论 0 条
xpL0
粉丝 0 发表 9 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2944
【软件正版化】软件正版化工作要点  2863
统信UOS试玩黑神话:悟空  2823
信刻光盘安全隔离与信息交换系统  2718
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1251
grub引导程序无法找到指定设备和分区  1217
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  163
点击报名 | 京东2025校招进校行程预告  162
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  160
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  157
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!