Linux如何知道当前进程的ID
2013-08-08 22:28
375 查看
在应用程序中可以通过getpid这个系统调用来获得当前进程的pid,在内核中可以通过current来获取当前进程的相关信息。而getpid这个系统调用实际上在内核中也是通过current来获取进程pid的,那么current是怎么来的呢?
其实,current是根据当前的栈指针计算得来的(具体计算方法这里不详细描述了)。栈指针是在进入内核时设置的,例如,应用程序调用getpid系统调用,进入内核后需要设置栈指针等,但是栈指针的值需要依据当前进程来获得,而栈未设置便不能使用current,怎么获得当前进程的内核栈地址呢?
原来,在GDT中有一个任务状态段,这个段的esp字段存储了当前进程的栈指针,因为每次进程切换时内核都把当前进程的内核栈指针保存到esp字段,所以读取esp字段就可以获得当前进程的内核栈地址了。
PS:在Intel的设计中,每一个进程都有自己的TSS段,但是Linux内核却只是为每个CPU核心建立了TSS段,这样做简单有效。
其实,current是根据当前的栈指针计算得来的(具体计算方法这里不详细描述了)。栈指针是在进入内核时设置的,例如,应用程序调用getpid系统调用,进入内核后需要设置栈指针等,但是栈指针的值需要依据当前进程来获得,而栈未设置便不能使用current,怎么获得当前进程的内核栈地址呢?
原来,在GDT中有一个任务状态段,这个段的esp字段存储了当前进程的栈指针,因为每次进程切换时内核都把当前进程的内核栈指针保存到esp字段,所以读取esp字段就可以获得当前进程的内核栈地址了。
PS:在Intel的设计中,每一个进程都有自己的TSS段,但是Linux内核却只是为每个CPU核心建立了TSS段,这样做简单有效。
相关文章推荐
- Linux如何查看当前进程的ID
- Linux如何查看当前进程的ID
- linux下如何获取进程的id和命令行参数
- Linux(CentOS) 如何查看当前占用CPU或内存最多的K个进程
- Linux如何查看当前占用CPU或内存最多的几个进程
- linux中$#、$?、$$[脚本运行时当前进程的id号]、$@、$*、$0、$1、$2、$-[上一个命令的最后一个参数]
- Linux 如何查看当前占用CPU或内存最多的K个进程
- Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?
- linux如何根据进程ID查找启动程序的路径
- linux如何查看当前占用CPU或内存最多的5个进程
- 如何查看linux当前支持的最大tcp连接数,如何查看一个进程的线程数
- 【Linux开发】如何查看Linux kernel的内置模块驱动列表和进程ID
- Linux如何查看当前占用CPU或内存最多的几个进程
- Linux下如何知道文件被那个进程写
- Linux如何查看当前占用CPU或内存最多的K个进程
- Linux 有问必答:如何知道当前正在使用的 shell 是哪个?
- Linux下获取当前进程ID、进程名、进程路径
- Linux下如何知道文件被那个进程写
- Linux 有问必答:如何知道进程运行在哪个 CPU 内核上?
- Linux下如何查看当前进程?