pid 0번 프로세스의 task_struct 포인터 받아오기..

soo211의 이미지

간단한 시스템 콜을 만들어 볼려구 하는데여~

pid 번호 입력 받아서

프로세스에 대한 간단한 정보를 출력하는 시스템콜이용~^^

시스템 콜 함수 정의 부분에서

struct task_struct *mytask = find_task_by_pid(0);

하면..

NULL이 리턴 되드라구용 ㅠㅠ

0번 swapper 프로세스의 task_struct는 다르게 받아와야 하나요?? 어떻게 해야 할 지 ㅠㅠ

고수님들 도와주세요!!

익명 사용자의 이미지

&init_task 네여 ㅠㅠ

이런 초보자의 험난한 길이 ㅠㅠ

doogie92의 이미지

저도 요즘 그 부분에 걸려서. 테스트 중인데

일단 제가 테스트 한 결과로 유추하면

read_lock, read_unlock에 대해서 문제점이 발생합니다.

소스 1:
read_lock(&tasklist_lock);
p_proc_init = (struct task_struct *)find_task_by_pid(0);
read_unlock(&tasklist_lock);

소스 2:
p_proc_init = (struct task_struct *)find_task_by_pid(0);

소스 1과 소스 2의 차이점인데

smp 모듈에서는 소스 1로 하면 아무런 문제가 없습니다. 그런데 2.4.21-20.EL에서는 read_lock과 read_unlock을 사용하면 모듈이 로드가 안되고 주석처리해서 테스트 해 본 결과 님과 같이 어뚱한 값을 가져오는 경우가 발생합니다.
read_lock, read_unlock을 사용하실 수 있으면 사용하시면 될 것이고 저처럼 사용할 수 없는 경우라면 아직 저도 그 부분에 대한 해답은 못찾았습니다.

방갑습니다..
잘 부탁드립니다.