假设我有两个Linux内核线程,主线程和工作线程。 Master使用kthread_run()
来创建worker。当worker正在接受套接字连接和阻塞时,主调用kthread_stop()
来阻止worker。
由于工作人员在接受操作时阻止并且无法退出,因此kthread_stop()
内部主人不会返回。
我应该怎样做才能以优雅的方式从主人那里杀死工作线程?感谢。
答案 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超时时,应该几乎为零轮询开销。