2012-05-09 41 views
3

我想了解系统调用在Linux内核中的工作方式。我有一个问题,我如何检索进行系统调用的进程的pid?在Linux中,如何检索进行系统调用的进程的PID

例如我期待在read()调用(同步阅读),我认为在FS被定义/ read_write.c作为

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

我想'getpid()'会工作,考虑到它仍然是一个过程...? – cHao

+0

@cHao没有理由调用getpid(),当上下文切换发生时,当前指针被改变(每个核心)为当前正在运行的上下文的值,在系统调用的情况下,该值是调用它的进程的上下文。你可以检查这个来获得pid。 –

+0

humm ..不确定如果getpid()在内核模式下工作。我会检查一下,稍后会更新。 Thx – bneupaane

回答

7

在系统调用上下文(调用进程的上下文中),您可以检查全球变量current这是类型struct task_struct这containts一个pid领域,你可以从中获得pid。

只是做current->pid让你在当前任务上下文的PID。

我假设你的意思是在内核中定义的系统调用的实际代码。

+0

啊,我不知道“当前”。将检查是否有效,并稍后更新。 Thx以获得快速响应:) – bneupaane

+0

s /在系统调用上下文中/进行系统调用时,您处于称为进程上下文的环境中(以前称为用户上下文),因为内核正在代表一个过程。在进程中/ – ninjalj

+0

@ninjalj是的,我应该采取不同的措词,因为主要区别是在内核和进程上下文之间进行的。 –

相关问题