当前位置: 技术问答>linux和unix
小弟刚学内核,几个问题请教以下:
来源: 互联网 发布时间:2015-11-22
本文导语: 1:task_struct结构中的ptrace跟踪标志的作用是什么 2:task_struct结构中的real_parent,parent指针各代表什么? 看书上的论述,有些晕。 另外,还想请教以下各位,学习内核应该采取什么样的学习方法较好,各位能不能讲讲自...
1:task_struct结构中的ptrace跟踪标志的作用是什么
2:task_struct结构中的real_parent,parent指针各代表什么?
看书上的论述,有些晕。
另外,还想请教以下各位,学习内核应该采取什么样的学习方法较好,各位能不能讲讲自己的经验,也给小弟我借鉴一下。
助人乃快乐之本,先行谢过!
2:task_struct结构中的real_parent,parent指针各代表什么?
看书上的论述,有些晕。
另外,还想请教以下各位,学习内核应该采取什么样的学习方法较好,各位能不能讲讲自己的经验,也给小弟我借鉴一下。
助人乃快乐之本,先行谢过!
|
1、ptrace是跟踪标志,置位时,父进程就可以跟踪子进程了。
2、在情景分析里面说,real_parent就生父,而parent就像养父一样。因为父进程有可能在子进程之前销毁,子进程就得重新找个养父。当然还有很多很多的细节之处,待在源代码中看到它们的不同用法就自然而然明白了。
3、看源代码要少问多看,一遍看不懂,就反复地看,偶尔可以上网查查,不过不要指望太高。一般情况下,去网上查找不如自己重新看的效率高。如果你越有野心,就越要有耐心,呵呵
2、在情景分析里面说,real_parent就生父,而parent就像养父一样。因为父进程有可能在子进程之前销毁,子进程就得重新找个养父。当然还有很多很多的细节之处,待在源代码中看到它们的不同用法就自然而然明白了。
3、看源代码要少问多看,一遍看不懂,就反复地看,偶尔可以上网查查,不过不要指望太高。一般情况下,去网上查找不如自己重新看的效率高。如果你越有野心,就越要有耐心,呵呵
|
1.你去看一下GDB调试原理,strace工具工作原理就明白
2. if (tsk->exit_signal != -1 && thread_group_empty(tsk)) {
int signal = tsk->parent == tsk->real_parent ? tsk->exit_signal : SIGCHLD;
do_notify_parent(tsk, signal);
} else if (tsk->ptrace) {
do_notify_parent(tsk, SIGCHLD);
}
从这段代码来猜测:由于一个进程有可能被用于调试,也就是它被GDB作为一个子进程在运行的时候,GDB就暂时作为它的父进程,当然还有STRACE工具也是这样工作,这样一来就与它本身的父进程有冲突,所以就用了两个标识
2. if (tsk->exit_signal != -1 && thread_group_empty(tsk)) {
int signal = tsk->parent == tsk->real_parent ? tsk->exit_signal : SIGCHLD;
do_notify_parent(tsk, signal);
} else if (tsk->ptrace) {
do_notify_parent(tsk, SIGCHLD);
}
从这段代码来猜测:由于一个进程有可能被用于调试,也就是它被GDB作为一个子进程在运行的时候,GDB就暂时作为它的父进程,当然还有STRACE工具也是这样工作,这样一来就与它本身的父进程有冲突,所以就用了两个标识