如何阻止阻止linux内核线程

时间:2016-02-04 08:45:31

标签: linux-kernel

假设我有两个Linux内核线程,主线程和工作线程。 Master使用kthread_run()来创建worker。当worker正在接受套接字连接和阻塞时,主调用kthread_stop()来阻止worker。

由于工作人员在接受操作时阻止并且无法退出,因此kthread_stop()内部主人不会返回。

我应该怎样做才能以优雅的方式从主人那里杀死工作线程?感谢。

1 个答案:

答案 0 :(得分:0)

您需要为工作人员正在读取的阻塞套接字指定超时:

struct timeval tv;
tv.tv_sec = 0;  /* 100 ms Timeout */
tv.tv_usec = 100000;
kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));

每当recv调用返回时,检查kthread_should_stop()。在100ms超时时,应该几乎为零轮询开销。