Linux kernel 在Linux中,如何检索进行系统调用的进程的pid

Linux kernel 在Linux中,如何检索进行系统调用的进程的pid,linux-kernel,Linux Kernel,我试图理解系统调用在Linux内核中是如何工作的。我的一个问题是,如何检索进行系统调用的进程的pid e、 g.我正在研究read()call(sync-read),我认为这是在fs/read\u-write.c中定义的 ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos) 在系统调用上下文(调用过程的上下文)中,您可以检查全局变量current,该变量的类型为struct tas

我试图理解系统调用在Linux内核中是如何工作的。我的一个问题是,如何检索进行系统调用的进程的pid

e、 g.我正在研究
read()
call(sync-read),我认为这是在fs/read\u-write.c中定义的

ssize_t do_sync_read(struct file *filp, char __user *buf, size_t len, loff_t *ppos)

在系统调用上下文(调用过程的上下文)中,您可以检查全局变量
current
,该变量的类型为
struct task\u struct
,其中包含一个
pid
字段,您可以从中获取pid

只需执行
current->pid
即可获得当前任务上下文的pid


我假设您指的是内核中定义的系统调用的实际代码。

我认为
getpid()
可以工作,因为它仍然是同一个进程…?@cHao没有理由调用getpid(),当发生上下文切换时,当前指针会发生更改(每个内核)当前运行上下文的值,在系统调用的情况下,该值是调用它的进程的上下文。您可以检查此项以获取pid.humm..不确定getpid()是否在内核模式下工作。我会检查,稍后会更新。ThxAh,我不知道“电流”。将检查是否有效,并将在以后更新。Thx for quick response:)s/在系统调用上下文中/当您进行系统调用时,您处于称为进程上下文(在以前称为用户上下文)的上下文中,因为内核是代表进程执行的。在processcontext/@ninjalj中,是的,我应该用不同的措辞,因为内核和流程上下文之间存在主要区别。