2012-05-09 37 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是的,我應該採取不同的措詞,因爲主要區別是在內核和進程上下文之間進行的。 –

相關問題