函数:kthread_stop( )
文件包含:
#include <linux/kthread.h>
函数定义:
在内核源码中的位置:linux-3.19.3/kernel/kthread.c
函数定义格式:
int kthread_stop (struct task_struct * k)
函数功能描述:
此函数用于终止输入参数k
对应的进程。
输入参数说明:
参数task是struct task_struct型变量,保存任务的基本信息,其定义在文件linux-3.19.3/include/linux/sched.h,内核源码注释比较详细。
返回参数说明:
函数返回值对应被终止进程对应的函数返回值,对应函数kthread_create_on_node( )中输入的第一个参数的返回值,如果新创建的进程没有调用函数wake_up_process( )唤醒,则此函数返回-EINTR。
实例解析:
编写测试文件: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查看内核输出信息,会出现如图所示的结果。
结果分析:
上图说明创建新进程成功,当前进程的进程号是3520,新创建的进程的进程号是3521,在新进程创建完成之后,执行函数wake_up_process( )唤醒新进程,然后调用函数kthread_stop( )终止新进程,输出结果显示新进程没有被执行,与kthread_create_on_node( )的输出结果进行对比,可以得出函数kthread_stop( )能够终止输入参数对应的进程。
酷客网相关文章:
评论前必须登录!
注册