我必须破解类的内核调度程序。我需要从我当前的TGID(2817)切换到它的'兄弟姐妹(2818)。
我在我的pick_next_rt_entity(来自rt.c)的副本中使用当前的TGID:PID 2817:2822。
我的进程树看起来像:
bash(2804)─┬─mylocT(2817)─┬─{mylocT}(2820)
│ ├─{mylocT}(2821)
│ └─{mylocT}(2822)
├─mylocT(2818)───{mylocT}(2823)
└─pstree(2819)
我的代码如下:
task = current->parent;
printk(KERN_INFO "\nCase 2 : PARENT CHILDREN: %s TGID %d", task->comm, task->tgid);
list_for_each(list,&task->children) {
task1=list_entry(list,struct task_struct,children);
printk(KERN_ALERT"\nPARENT THREAD GROUP: %s\tpid %d\ttgid %d \n",task1->comm,task1->pid,task1->tgid);
}
但DMESG输出如下:
输入当前TGID:PID 2817:2822
[ 182.486117]
[ 182.486117] Case 2 : PARENT CHILDREN: bash TGID 2804<1>[ 182.486118]
[ 182.486118] PARENT THREAD GROUP: pid 1149585120 tgid -30720
[ 182.486119]
[ 182.486119] PARENT THREAD GROUP: pid 1149585120 tgid -30720
[ 182.486120]
[ 182.486120] PARENT THREAD GROUP: pid 1149585120 tgid -30720
[ 182.486121]
为什么我为父母的孩子弄错了TGID / PID?