Linux内核API kthread_stop

kthread_stop函数功能描述:此函数用于终止输入参数k对应的进程。

kthread_stop文件包含

#include <linux/kthread.h>

kthread_stop函数定义

在内核源码中的位置:linux-3.19.3/kernel/kthread.c

函数定义格式:

int kthread_stop (struct task_struct * k)

kthread_stop输入参数说明

参数task是struct task_struct型变量,保存任务的基本信息,其定义在文件linux-3.19.3/include/linux/sched.h,内核源码注释比较详细。

kthread_stop返回参数说明

函数返回值对应被终止进程对应的函数返回值,对应函数kthread_create_on_node( )中输入的第一个参数的返回值,如果新创建的进程没有调用函数wake_up_process( )唤醒,则此函数返回-EINTR。

kthread_stop实例解析

编写测试文件:kthread_stop.c

头文件引用:

#include <linux/module.h>
#include <linux/sched.h>
#include <linux/pid.h>
#include <linux/wait.h>
#include <linux/kthread.h>
MODULE_LICENSE("GPL");

新进程执行的函数定义:

int my_function(void * argc)
{
    printk("in the kernel thread function! \n");
    printk("the current pid is:%d\n", current->pid);     //显示当前进程的PID值
    printk("out the kernel thread function\n");
    return 0;
}

模块加载函数定义:

static int __init kthread_stop_init(void)
{
    char namefrm[]="kthread_stop_init.c%s"; //输出类型名,在此程序中无影响
    struct task_struct * result;
    printk("into kthread_stop_init.\n");
    result=kthread_create_on_node(my_function, NULL, -1, namefrm);  //创建新进程
    printk("the pid of the new thread is:%d\n", result->pid); //显示当前进程的PID值
    wake_up_process(result);                                      //启动新的线程
    kthread_stop(result);                                         //停止新的线程
    printk("the current pid is:%d\n", current->pid);              //显示当前进程的PID值
    printk("out kthread_stop_init.\n");
    return 0;
}

模块退出函数定义:

static void __exit kthread_stop_exit(void)
{
    printk("Goodbye kthread_stop\n");
}

模块加载、退出函数调用:

module_init(kthread_stop_init);
module_exit(kthread_stop_exit);

实例运行结果及分析:

首先编译模块,执行命令insmod kthread_stop.ko插入模块,然后执行命令dmesg -c查看内核输出信息,会出现如图所示的结果。

Linux内核API kthread_stop

结果分析:

上图说明创建新进程成功,当前进程的进程号是3520,新创建的进程的进程号是3521,在新进程创建完成之后,执行函数wake_up_process( )唤醒新进程,然后调用函数kthread_stop( )终止新进程,输出结果显示新进程没有被执行,与kthread_create_on_node( )的输出结果进行对比,可以得出函数kthread_stop( )能够终止输入参数对应的进程。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程