转载_linux 两种方式 创建内核线程_williamwanglei的博客-程序员ITS301

技术标签: Linux内核  

kernel_thread()、daemonize()
------------------------------------------------------
int thread_func(void *arg)
{
    /* 
     * 设置线程名 -- thread_name,ps可以看到的线程名
     * 如果不使用daemonize设置内核线程名,并且kernel_thread()
     * 是用户态程序通过系统调用使用的,则ps将看到一个和用户进程同名
     * 的一个内核线程。
     */
    daemonize("thread_name"); 
    return 0;
}

 

{
    pid_t pid;
    /* 创建内核线程 */
    pid = kernel_thread(thread_func, NULL, CLONE_KERNEL);
    if (pid < 0)
    {
        printk("kernel_thread error\n");
    }
}

 

 



kthread_run() -- 这种创建方式比较简洁
------------------------------------------------------

#include <linux/kthread.h>

int thread_func(void *arg)
{
    return 0;
}


{
    struct task_struct * my_thread = NULL;
    int rc;
    my_thread = kthread_run(thread_func, NULL, "thread_name");
    if (IS_ERR(my_thread)) 
    {
        rc = PTR_ERR(my_thread);
        printk("error %d create thread_name thread", rc);
    }
}

注: kthread_run()最终调用kernel_thread()创建线程

 

 

 

 

 

 

 

kernel_thread()类似application编程里面的fork()
------------------------------------------------------
static int jffs2_garbage_collect_thread(void *_c)
{
    ...
    daemonize("jffs2_gcd_mtd%d", c->mtd->index);
    ...
    complete(&c->gc_thread_start);
    ...
}


int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c)
{
    pid_t pid;
    int ret = 0;

    BUG_ON(c->gc_task);

    init_completion(&c->gc_thread_start);
    init_completion(&c->gc_thread_exit);

    pid =kernel_thread(jffs2_garbage_collect_thread, c, CLONE_FS|CLONE_FILES);
    if (pid < 0) {  // 判断出错条件
        printk(KERN_WARNING "fork failed for JFFS2 garbage collect thread: %d\n", -pid);
        complete(&c->gc_thread_exit);
        ret = pid;
    } else {        // pid > 0 ,说明这个肯定在父进程中
        printk(KERN_DEBUG "JFFS2: Garbage collect thread is pid %d\n", pid);
        wait_for_completion(&c->gc_thread_start); //父进程等待子进程结束
    }

    return ret;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/williamwanglei/article/details/9950671

智能推荐

银河麒麟高级服务器操作系统V10上编译安装node.js_中国信创服务社区的博客-程序员ITS301_银河麒麟安装node

目录背景准备编译环境编译安装验证安装背景node.js 官方编译好的arm64版本安装包,释放到银河麒麟高级服务器操作系统V10上,存在运行崩溃故障。因此考虑基于源码手动编译安装准备编译环境sudo dnf install python gcc-c++ make编译安装下载源码执行指令cd ~tar -xf ~/下载/node-12.19.1.tar.gzcd node-12.19.1./configure --prefix=/usr..

oracle rfs进程过多,DATA GUARD的RFS进程的问题_晚茶小姐的博客-程序员ITS301

10分钟前刚做了个DG,我的情况如下:(敏感信息用叉替换掉了)SQL&gt; desc V$MANAGED_STANDBYName Null? Type----------------------------------------- -------- ----------------------------PROCE...

VS2015 + Qt release 发布_guosongye的博客-程序员ITS301

https://blog.csdn.net/qq_17239003/article/details/51298510以上先转几个有用的 博文。为了发布一个移植可用的Qt5软件,搞了好久才终于成功了。大家借鉴下~ win7 64位 Vs2013 Qt5 1.首先,在VS界面选择Release+x64(你要发布32,则选择win32,前提是你装了32位的Qt)。2.生成-重新生成解决方案。3.打开-文...

Qt中 QTableWidgetItem设置编辑状态小技巧_Space丶Miao的博客-程序员ITS301_qtablewidgetitem编辑框的值

通过QTableWidget中的item( )方法可以获得相应行数和列数的QTableWidgetItem,若要设置该Item的编辑状态(即可编辑状态和不可编辑状态),可以通过QTableWidgetItem下的setflags函数来设置。

神经网络算法可以用来干什么_aifans_bert的博客-程序员ITS301_神经网络算法是用来干什么的

人工神经网络(Artificial Neural Networks,ANN)系统是 20 世纪 40 年代后出现的。它是由众多的神经元可调的连接权值连接而成,具有大规模并行处理、分布式信 息存储、良好的自组织自学习能力等特点。BP(Back Propagation)算法又称为误差 反向传播算法,是人工神经网络中的一种监督式的学习算法。BP 神经网络算法在理 论上可以逼近任意函数,基本的结构由非线性变化单元组成,具有很强的非线性映射能力。而且网络的中间层数、各层的处理单元数及网络的学习系数等参数可根据具体情况

随便推点

RISC OS(用于Raspberry Pi 2 和Raspberry Pi 3)_一颗小树x的博客-程序员ITS301

官网说明地址:https://www.riscosopen.org/content/官网都是英文的,我做一下翻译,方便大家学习。第三方操作系统映像Raspberry Pi的第三方操作系统映像也可用:RISC OS适用于ARM设备的快速且易于定制的操作系统这是Raspberry Pi的RISCOS。对于我们的官方Raspberry Pi版本,您可能需要查看Ra...

2019年用户流失分析(二)——Python实现_mx丶姜小辉的博客-程序员ITS301

3.3 工单情况分析(舆情分析) 13241个用户一年内的工单数为8480条,里面有用户投诉与报障的具体内容信息。我们可以对投诉与报障内容进行情感分析,利用LDA主题模型提取内容关键信息,了解用户的需求、意见,提出改善的建议。 有价值的内容信息数据需要通过中文分词、停用词处理、语义歧义处理、情感打分、情感修正等等一系列的文本处理。(本次使用的情感词表是2007年10...

如何把pdf翻译成中文?_办公小小技巧的博客-程序员ITS301_pdf文件翻译成中文

 如果要把pdf翻译成中文,要怎么进行文件的翻译呢?在很多进行文件翻译问题上都会借助转换器来进行操作。pdf翻译成中文也可以的。详细的转换方法可以参考以下的步骤 使用工具:迅捷在线pdf转换器 转换方法: 1、打开浏览器输入“迅捷在线PDF转换器”,并在搜索结果中找到对应网页,点击访问该在线操作平台。 2、进入在线操作界面后。在菜单栏上的操作功能中找到“文档处理”下的“在线翻译”并点击“pdf在线...

iOS 使用nib文件(一)_xxdzyyh的博客-程序员ITS301_ios nib

使用xib文件,我们可以轻松实现所见即所得的效果。总结一下个人使用xib文件过程中遇到的问题。

vs2008 + WinDDK(7600.16385.1)编译错误的问题_Leen的博客-程序员ITS301

之前装了vs2005 配置了 WinDDK(7600.16385.1),能够正常使用现在因为项目需要安装了vs2008结果。。。New个项目都错误一大堆:C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ctype.h(94) : error C2144: syntax error : 'int' shoul

利用VCS对RTL进行编译和调试_joris30的博客-程序员ITS301

VCS现在一般都安装在linux服务器上,打开terminal,两种方法:1.命令行敲入"vcs -debug_all 若干源文件.v " ./simv -gui -tbug2.直接敲入dve,在simulator-&gt;setup中,配置路径、对应的exec文件、vpd文件即可。在view下设置timescale,在simulator里面有add force ,s...