Linux进程:进程属性
前言
今天的博客给大家分享一下Linux进程有哪些进程属性,欢迎大家前来学习!!!
如有不对,评论区讨论哦。
一、进程有哪些属性呢?

我们随便用ps ajx查看一个进程,head -1显示第一行,
我们会发现第一行有10个属性,可以肯定的是进程最少有这10个属性没得跑了,
当然,肯定会有更多的属性没有显示出来。
那么,接下来,我们详细介绍一下这10个字段究竟是啥吧?
二、PID — 进程标识符
pid,也就是进程标识符,用来区分进程的唯一性。
由于操作系统不断在创建进程,所以PID是在递增。
我们会发现,将同一个进程关掉重新启动后,PID是会变化的。
那么如何获取pid呢?
getpid系统调用即可获取当前进程的pid
头文件是
<unistd.h>和<sys/types.h>
#include <unistd.h>
#include <sys/types.h>pid_t getpid();
三、PPID — 父进程的标识符
在LInux系统中,系统启动之后,新创建任何进程的时候,都是由自己的父进程创建的!
ppid就是一个进程的父进程的唯一标识符,
如何获取父进程号呢?
和获取进程号非常相似
使用getppid系统调用即可获取父进程号。
#include <unistd.h>
#include <sys/types.h>pid_t getppid();
当我们去结束进程又重启进程,发现ppid不会改变,
去查看后,发现ppid对应的进程是bash进程

在命令行中,执行命令/执行程序,本质上是bash这个进程,创建的子进程,由子进程执行我们的代码!
四、PGID — 进程组标识符
多个进程之间除了父子关系、兄弟关系,还有组内关系。
eg:pidof a.out | xagrs kill -9
这就是一个进程组,这个进程组里面有两个进程pidof a.out 和 xagrs kill -9
这两个进程单独用,没啥用,组合起来就能干掉a.out这个 网路服务。
进程组id 等于 进程组中最先被创建的进程的pid,也就是组长进程的pid,
而一个进程组,往往是组内多个进程同时配合,完成一个任务/作业的。
所以一个进程组对应着一个任务号。
五、SID — 会话ID
s的全称是session会话的意思。
每当一个用户登录的时候,操作系统就会建立一个session会话,同时在会话里面启动一个bash进程,并且打开一个终端文件。
在这个终端中启动的进程,无论是前台进程,还是后台进程,都和bash属于同一个会话。
但是,我们退出的时候,肯定是要释放会话的,这是不论是前台进程,还是后台进程,
因为他们都属于这个session,所以这些进程都可能会受到影响。
如果我们不想让进程收到session的影响,就要让进程变成守护进程了。
守护进程的知识,在后面的章节中,我们会详细讲解。
六、TTY — 这个进程运行的终端号
我们可以同时打开多个终端,每一个终端上都可以运行一个进程,
这个TTY就是标识我这个进程在哪一个终端上运行。
七、STAT — 进程的状态
一个进程在不同的时候可能表现出不同的状态,
比如下图中的状态:

但是这是操作系统原理中的进程状态,具体Linux系统中的进程状态,我们在下一篇博客中再和大家分享吧
八、UID — 启动进程的用户的ID
UID用来标识一个用户,每个用户在登录的时候都会拥有一个UID,
UID不仅会在权限校验的时候有用,
在一个进程启动的时候,也会记录下来这个进程是哪一个用户启动的。
为什么有用户名还不够?还要再弄一个UID呢?
思考一下,字符串和数字谁比较起来更快速呢?
显然是数字,所以UID选择用数字来标识一个用户,进行校验的时候速度更快。
九、TIME、COMMAND
time表示这个进程运行了多长时间,
command表示这个进程是什么指令启动的。
