pid를 이용해서 ppid 값을 구하기 (kernel mode 에서)

beirut의 이미지

안녕하세요?

kernel 모드에서 pid 값을 알고 있고 ppid 값을 구할려고 합니다.

pid 값을 인자로 해서 return 값을 ppid 로 해주는 함수가 없을까요?

siblings 값을 구할려구 하는데, ppid 값을 어떻게 구해야 할지 몰라서 질문 올립니다, 아무리 찾아봐도 없는 것 같아..

그럼 답변 부탁드립니다.

수고 하십시요.

익명 사용자의 이미지

/usr/src/linux/kernel/timer.c

...
asmlinkage long sys_getppid(void)
{
   int pid;
   struct task_struct *me = current;
   struct task_struct *parent;

   parent = me->group_leader->real_parent;
   for ( ; ; ) {
      pid = parent->tgid;
#ifdef CONFIG_SMP
{
      struct task_struct *old = parent;

      /*
       * Make sure we read the pid before re-reading the
       * parent pointer:
       */
      rmb();
      parent = me->group_leader->real_parent;
      if (old != parent)
         continue;
}
#endif
      break;
   }
   return pid;
}
...

위 코드를 잘~ 활용하면 구할수도 있어 보입니다.