一、复习
补充点:
在vim中如果我们想要不关闭vim且执行指令:
可以在下面的底行模式进行切换(例如使用man手册查看sleep函数 - 退回去直接按q即可退出!)
1、通过ps命令查看进程
ps ajx | grep proc
可以通过管道查看当前运行的进程!
ps ajx | head -1 && ps ajx | grep proc
ps ajx | head -1 ; ps ajx | grep proc
上面两种方法一直(可以用&&表示也可以用;表示)
表示两条指令同时运行!
- PID表示该进程的编号
- command表示该执行该进程运用了什么指令!
- 下面的grep --color=auto proc是因为我们在运用grep关键字过滤proc
ps ajx | head -1 ; ps ajx | grep proc | grep -v proc
这里的 -v 指的是反向匹配,即不含关键字proc的内容;
2、ps指令的本质是什么?(deepseek)
Linux系统中ps
指令的本质是通过读取/proc
虚拟文件系统中的进程数据来获取系统进程状态信息。
/proc
是内核提供的虚拟文件系统,以目录和文件的形式动态反映系统运行状态,其中每个进程对应一个以PID命名的子目录,包含该进程的详细运行时信息(如内存映射、环境变量等)。ps
无需特殊权限即可运行,因为它仅读取这些公开的虚拟文件。
3、kell杀掉一个进程
kill -9 + (进程PID号)
在操作系统中有不同的进程,每个进程都有自己唯一的编号PID位于PCB中!
ps指令(显示进程的信息)的本质:实际上就是通过系统调用接口对PCB结构体进行遍历!打印其信息!
如果想要获取自己的PID进程应该怎么办?
4、第一个系统调用接口get_pid()
操作系统不相信别人,不希望用户直接拿到tast_struct访问内容,只能通过系统调用接口,因此当前系统内存在一个系统调用接口用来获取PID的值:getpid()
调用该系统调用接口我们需要包含对应的头文件!(其返回值是pid_t,本质是一个有符号的整数)
因此getpid()的实质就是自己找到自己对应的task_struct,然后访问其中,找到自己对应的pid的值,再返回给上层!
getpid()函数会返回一个pid_t类型:实质上就是有符号整数!
1 #include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 while(1)
6 {
7 // pid_t_id = getpid();
8 printf("I am process , my pid is %d\n",getpid());
9 sleep(1);
10 }
11 return 0;
12 }
获取到的pid值和通过ps查阅的值是一样的!
进程终止后重新启动PID值发生改变很正常!