11.进程-基础

在Linux系统中,执行程序如`./a.out`会产生新的进程。`ps -u allen u`用于查看用户进程,进程拥有唯一ID(PID),但PID可重用。进程有状态且由父进程生成,1号进程(init)是所有进程的始祖,PID为0的是调度进程,2号是页守护进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要特别强调的是,本文阅读并修改自:https://blog.youkuaiyun.com/q1007729991/article/details/53608721

当你编译完一段代码生成 a.out 后,在命令行键入 ./a.out,这时候,就有一个(或多个)新的进程产生了;

在此之前,a.out文件只是一份保存在硬盘上的文件,它并不是进程;一旦在终端里键入./a.out,终端 shell(它也是个进程)就会把 a.out 文件读到内存,一旦把控制权交给内存中的这段 a.out (称之为内存映像,它一硬盘上的 a.out 文件内容有些许区别,但是基本一致),于是 a.out 便开始执行了;

运行中的 a.out 是活物,它是进程(也许并不精确,但是这并不影响后面的学习);

查看有哪些进程

命令 ps -u allen u 可以帮助你查看当前系统中属于用户allen(用户id)的进程,最后那个 u 表示显示格式,这里表示以用户格式显示;

需要注意的是,ps后面的选项以短破拆号-开头和没有它开头的含义是不同的;一般来说,有 -开头的表示的是”UNIX options”,没有-开头的叫 “BSD options”,而以双破折号 --开头的叫 “GNU long options”。

结果:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
allen     6273  0.0  0.1   6372  4068 ?        Ss   10:19   0:00 /lib/systemd/systemd --user
allen     6274  0.0  0.0  25212  1508 ?        S    10:19   0:00 (sd-pam)
allen     6330  0.0  0.1  13368  3296 ?        S    10:19   0:01 sshd: allen@pts/1
allen     6331  0.0  0.2   7332  5100 pts/1    Ss   10:19   0:00 -bash
allen     6461  0.0  0.0   2200   512 pts/1    T    10:25   0:00 ./getmyid
allen     7492  0.0  0.1  13364  3272 ?        S    13:38   0:00 sshd: allen@pts/2
allen     7493  0.0  0.2   7100  4620 pts/2    Ss   13:38   0:00 -bash
allen     7656  0.0  0.1   5320  3116 pts/2    S+   13:56   0:00 man ps
allen     7668  0.0  0.0   4580   796 pts/2    S+   13:56   0:00 pager
allen     7751  0.0  0.1   7752  3120 pts/1    R+   14:10   0:00 ps -u allen u

上述结果中,各字段含义:

名称含义
USER进程的属主
PID进程的 id 号
%CPU进程占用的 CPU 百分比
%MEM占用的内存百分比
VSZ进程虚拟大小
RSS驻留页的数量
TTY终端 id 号
STAT进程状态(D、R、S、T、W、X、Z、<、N、L、s 等)
START进程开始运行时间
TIME累积使用的CPU时间
COMMAND使用的命令

进程状态值的含义(从这里也可以看出,进程它是有状态的):

名称含义
D不可中断睡眠
R运行或就绪态
S休眠状态
T停止或被追踪
W进入内存交换(从内核2.6开始无效)
X死掉的进程
Z僵尸进程
<优先级高的进程
N优先级较低的进程
L有些页被锁进内存
s进程的领导者(在它之下有子进程)

进程id

前面的 ps 命令展示的结果,就可以看到进程的 id 号。进程的 id 号是唯一的;虽然是唯一的,但是PID可以重用,当一个进程终止后,其他进程就可以使用它的PID了;

每个进程都有父进程(除了 1 号进程(init进程)外),因为所有进程都是由另一个进程生出来的;

PID为0的进程为调度进程,该进程是内核的一部分;PID为1的进程为init进程,它是一个普通的用户进程,但是以超级用户特权运行;PID为2的进程是页守护进程,负责支持虚拟存储系统的分页操作。

linux 系统提供了两个系统调用函数 getpid 和 getppid 来让我们查看当前进程的 id 和它的父进程 id;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值