我想了解系統調用在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