在linux 2.6内核模块中替换waitpid的一个很好的替代方案?

时间:2014-08-08 01:54:10

标签: linux module linux-kernel

在我的linux 2.6内核模块中,我通过kernel_thread函数创建了一个内核线程,并将第三个参数指定为SIGCHLD。因此,当此子线程退出时,它将向父进程发送SIGCHLD信号。相应地,在父进程中如果存在未决信号SIGCHLD,我希望它等待任何子线程的终止。

我知道在用户空间linux中提供了waitpid系统调用。我们可以像使用它一样 waitpid(-1,0,WNOHANG)。我正在寻找的是waitpid的替代品,可以在内核模块中使用。

是否有这样的替代或其他可能的机制?

1 个答案:

答案 0 :(得分:1)

首先,您不能调用名为“sys_”的内核函数,因为这些函数是从用户空间进程调用的。传递的任何地址必须是用户空间地址,而不是内核地址。另一方面,名为“do_”的函数旨在使用内核上下文进行访问。

你应该熟悉Bovet / Cesati:

http://books.google.com/books?id=h0lltXyJ8aIC&pg=PT139&lpg=PT139&dq=kernel_thread+function&source=bl&ots=gO-sO038GQ&sig=yZSwg5h6BLO2BCzahNdEzX1TG7s&hl=en&sa=X&ei=XznsU4u2BOLLsQS404C4Dg&ved=0CDMQ6AEwAg#v=onepage&q=kernel_thread%20function&f=false

在尝试之前。