대략 task_struct *my_task
뭐 이렇게 해서 id 받아서
프로세스를 찾아낸 다음에..
커널 쓰레드인지 아닌지 여부를 판별하고 싶은데..
어떤 변수에 접근을 하면 여부가 판별되는지 궁금합니다.
my_task->active_mm != my_task->mm이면 kernel thread입니다. 원리는 kernel thread는 자신의 mm_struct을 갖지 않고 일반 프로세스의 mm_struct를 사용한다는 것입니다.
Freedom is another word for nothing left to lose, Nothing doesn't mean nothing if it ain't free.
그냥 mm 이 NULL 인가만 보면 되지 않나요..
저 같은 경우는
((my_task->mm == NULL) && (my_task->flags & PF_FORKNOEXEC))
이렇게 사용하고 있습니다.
싸이트에서 찾아서 그대로 사용중
방갑습니다.. 잘 부탁드립니다.
저 같은 경우는 ((my_task->mm == NULL) && (my_task->flags & PF_FORKNOEXEC)) 이렇게 사용하고 있습니다.
my_task->flags & PF_FORKNOEXEC 의 의미가 무엇인지요?
그리고 mm이 null인지 확인하는 것에 더하여 이 코드를
추가로 확인하는 이유가 무엇인지도 궁금합니다.
[답변] 새로 테스트 해 본 결과 위에 대해서 의문점이 생기네요.
일단 PF_FORKNOEXEC 는 fork는 이루어진 상태이고 execve는 이루어 지지 않은 상태인데 user process에서도 발생할 수 있는 상태입니다.
~ 아래의 프로세서의 상태를 보면 ~1461까지는 mm이 NULL이고 active_mm도 NULL로 나와서 my_task->active_mm != my_task->mm로 구분하기는 힘들어 보입니다.
mm을 NULL로 해서 kernel process를 판단하기에는 또 다른 문제점이 있어보이기도 합니다. 아직 테스트 중.
[질문] 첫번째 kernel process란?
UID PID PPID C STIME TTY TIME CMD root 1 0 0 Apr11 ? 00:00:04 init root 2 0 0 Apr11 ? 00:00:00 [migration/0] root 6 1 0 Apr11 ? 00:00:00 [keventd] root 7 1 0 Apr11 ? 00:00:00 [ksoftirqd/0] root 13 1 0 Apr11 ? 00:00:00 [bdflush] root 11 1 0 Apr11 ? 00:00:00 [kswapd] root 12 1 0 Apr11 ? 00:00:00 [kscand] root 14 1 0 Apr11 ? 00:00:00 [kupdated] root 15 1 0 Apr11 ? 00:00:00 [mdrecoveryd] root 22 1 0 Apr11 ? 00:00:00 [scsi_eh_0] root 23 1 0 Apr11 ? 00:00:00 [scsi_eh_1] root 26 1 0 Apr11 ? 00:00:02 [kjournald] root 85 1 0 Apr11 ? 00:00:00 [khubd] root 1461 1 0 Apr11 ? 00:00:00 [kjournald] root 1784 1 0 Apr11 ? 00:00:00 syslogd -m 0
약간의 편집이 추가 되었는데 ~1461까지가 kernel process 인가요?? 그리고 process 이름에 []가 의미하는 의미는??
두번째 질문 struct task_struct 에 보면
pid_t session; pid_t tgid;
멤버 변수가 있는데 위의 두가지가 의미하는 것에 대해서 설명 좀 부탁드립니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
my_task->active_mm != my_task->mm이
my_task->active_mm != my_task->mm이면 kernel thread입니다. 원리는 kernel thread는 자신의 mm_struct을 갖지 않고 일반 프로세스의 mm_struct를 사용한다는 것입니다.
Freedom is another word for nothing left to lose,
Nothing doesn't mean nothing if it ain't free.
그냥 mm 이 NULL 인가만 보면 되지 않나요..
그냥 mm 이 NULL 인가만 보면 되지 않나요..
저 같은 경우는((my_task->mm == NULL) &a
저 같은 경우는
((my_task->mm == NULL) && (my_task->flags & PF_FORKNOEXEC))
이렇게 사용하고 있습니다.
싸이트에서 찾아서 그대로 사용중
방갑습니다..
잘 부탁드립니다.
[quote="doogie92"]저 같은 경우는((my_task-
my_task->flags & PF_FORKNOEXEC 의 의미가 무엇인지요?
그리고 mm이 null인지 확인하는 것에 더하여 이 코드를
추가로 확인하는 이유가 무엇인지도 궁금합니다.
[답변] 새로 테스트 해 본 결과 위에 대해서 의문점이 생기네요.
[답변] 새로 테스트 해 본 결과 위에 대해서 의문점이 생기네요.
일단 PF_FORKNOEXEC 는 fork는 이루어진 상태이고 execve는 이루어 지지 않은 상태인데 user process에서도 발생할 수 있는 상태입니다.
~ 아래의 프로세서의 상태를 보면
~1461까지는 mm이 NULL이고 active_mm도 NULL로 나와서 my_task->active_mm != my_task->mm로 구분하기는 힘들어 보입니다.
mm을 NULL로 해서 kernel process를 판단하기에는 또 다른 문제점이 있어보이기도 합니다. 아직 테스트 중.
[질문]
첫번째 kernel process란?
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Apr11 ? 00:00:04 init
root 2 0 0 Apr11 ? 00:00:00 [migration/0]
root 6 1 0 Apr11 ? 00:00:00 [keventd]
root 7 1 0 Apr11 ? 00:00:00 [ksoftirqd/0]
root 13 1 0 Apr11 ? 00:00:00 [bdflush]
root 11 1 0 Apr11 ? 00:00:00 [kswapd]
root 12 1 0 Apr11 ? 00:00:00 [kscand]
root 14 1 0 Apr11 ? 00:00:00 [kupdated]
root 15 1 0 Apr11 ? 00:00:00 [mdrecoveryd]
root 22 1 0 Apr11 ? 00:00:00 [scsi_eh_0]
root 23 1 0 Apr11 ? 00:00:00 [scsi_eh_1]
root 26 1 0 Apr11 ? 00:00:02 [kjournald]
root 85 1 0 Apr11 ? 00:00:00 [khubd]
root 1461 1 0 Apr11 ? 00:00:00 [kjournald]
root 1784 1 0 Apr11 ? 00:00:00 syslogd -m 0
약간의 편집이 추가 되었는데
~1461까지가 kernel process 인가요??
그리고 process 이름에 []가 의미하는 의미는??
두번째 질문
struct task_struct 에 보면
pid_t session;
pid_t tgid;
멤버 변수가 있는데 위의 두가지가 의미하는 것에 대해서 설명 좀 부탁드립니다.
방갑습니다..
잘 부탁드립니다.
댓글 달기