2012-05-09 3 views
3

리눅스 커널에서 시스템 호출이 어떻게 작동하는지 이해하려고합니다. 내가 가진 한 가지 질문은 시스템 호출을하는 프로세스의 PID를 어떻게 검색 할 수 있는가이다.리눅스에서 어떻게 시스템 호출을하는 프로세스의 PID를 검색합니까?

난 당신이 확인할 수 있습니다 (호출 프로세스의 컨텍스트 인) 시스템 호출 맥락에서

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

으로 내가 FS에 정의되어 생각 read() 전화 (읽기 동기)/read_write.c 찾고 있어요 struct task_struct 유형의 전역 변수 current에는 pid 필드가 들어있어 pid를 가져올 수 있습니다.

그냥

. 당신이에 현재 작업 컨텍스트의 PID를 얻을 수 current->pid을 나는 당신이 커널에 정의 된 시스템 호출에 대한 실제 코드를 의미 있으리라 믿고있어.

+0

아, "현재"에 대해 몰랐습니다. 작동하는지 확인하고 나중에 업데이트됩니다. 빠른 응답을위한 Thx : – bneupaane

+0

/시스템 콜 컨텍스트에서/시스템 호출을 할 때 커널이 프로세스 컨텍스트 (이전에는 사용자 컨텍스트라고 함)라는 컨텍스트에 있습니다. 프로세스. 프로세스 컨텍스트/ – ninjalj

+0

@ninjalj 그래, 커널과 프로세스 컨텍스트간에 주요 차이점이 있기 때문에 다르게 언급해야합니다. –

관련 문제