我想了解系统调用在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)
我想了解系统调用在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)
在系统调用上下文(调用进程的上下文中),您可以检查全球变量current
这是类型struct task_struct
这containts一个pid
领域,你可以从中获得pid。
只是做current->pid
让你在当前任务上下文的PID。
我假设你的意思是在内核中定义的系统调用的实际代码。
我想'getpid()'会工作,考虑到它仍然是一个过程...? – cHao
@cHao没有理由调用getpid(),当上下文切换发生时,当前指针被改变(每个核心)为当前正在运行的上下文的值,在系统调用的情况下,该值是调用它的进程的上下文。你可以检查这个来获得pid。 –
humm ..不确定如果getpid()在内核模式下工作。我会检查一下,稍后会更新。 Thx – bneupaane