Linux源码阅读笔记08-进程调度API系统调用案例分析

简介: Linux源码阅读笔记08-进程调度API系统调用案例分析

kthread_create_on_node

kthread_create_on_node函数功能:指定存储节点创建新内核线程。源码如下:

操作实战

#include <linux/module.h>
#include <linux/pid.h>
#include <linux/sched.h>
#include <linux/kthread.h>
#include <linux/wait.h>
int MyThreadFunc(void* argc) {
    printk("MyThreadFunc\n");
    printk("MyThreadFuncPID: %d\n", current->pid);
    printk("Exit MyThreadFunc\n");
    return 0;
}
static int __init KthreadCreateOnNodeInit(void) {
    struct task_struct* pts = NULL;
    printk("KthreadCreateOnNodeInit\n");
    pts = kthread_create_on_node(MyThreadFunc, NULL, -1, "ktconode.c");
    
    printk("New thread PID: %d\n", pts->pid);
    wake_up_process(pts);
    printk("Curretn thread PID: %d\n", current->pid);
    return 0;
}
static void __exit KthreadCreateOnNodeExit(void) {
    printk("Exit kernel: KthreadCreateOnNodeExit\n");
}
MODULE_LICENSE("GPL");
module_init(KthreadCreateOnNodeInit);
module_exit(KthreadCreateOnNodeExit);

wake_up_process

wake_up_process函数功能:唤醒处于睡眠状态的进程,状态转换为RUNNING状态,让CPU重新调度处理。

  • 唤醒成功返回1
  • 唤醒失败(该线程已经是RUNNING状态)返回0

源代码如下:

操作实战

#include <linux/kthread.h>
#include <linux/sched.h>
#include <linux/wait.h>
#include <linux/module.h>
#include <linux/pid.h>
#include <linux/list.h>
#include <linux/delay.h>
struct task_struct* pts_thread = NULL;
int MyThreadFunc(void* argc) {
    int iData = -1;
    printk("MyThreadFunc\n");
    printk("MyThreadFunc PID: %d\n", current->pid);
    //查看父进程状态
    printk("初始化函数状态为: %ld\n", pts_thread->state);
    iData = wake_up_process(pts_thread);
    printk("wake_up_process之后父进程状态: %ld\n", pts_thread->state);
    printk("wake_up_process返回结果为: %d\n", iData);
    printk("Exit MyThreadFunc\n");
    return 0;
}
static int __init WakeUpProcessInit(void) {
    int res = 1; // 保存wake_up_process结果
    char cName[] = "wakeup.c%s";
    struct task_struct* pResult = NULL;
    long time_out;
    wait_queue_head_t head;
    wait_queue_entry_t data;
    printk("WakeUpProcessInit\n");
    //指定节点,创建新的内核线程
    pResult = kthread_create_on_node(MyThreadFunc, NULL, -1, cName);
    printk("New thread PID: %d\n", pResult->pid);
    printk("Current thread PID: %d\n", current->pid);
    init_waitqueue_head(&head);
    init_waitqueue_entry(&data, current);
    add_wait_queue(&head, &data);
    pts_thread = current;
    res = wake_up_process(pResult);
    printk("wake_up_process唤醒新线程之后的结果为: %d\n", res);
    time_out = schedule_timeout_uninterruptible(2000*10);
    res = wake_up_process(current);
    printk("唤醒当前线程的结果为: %d\n", res);
    
    printk("调用sched_timeout_uninterruptible返回结果为: %ld\n", time_out);
    printk("Exit WakeUpProcessInit\n");
    return 0;
}
static void __exit WakeUpProcessExit(void) {
    printk("Exit WakeUpProcessExit\n");
}
module_init(WakeUpProcessInit);
module_exit(WakeUpProcessExit);

相关文章
|
4月前
|
JSON API 数据格式
小红书API接口文档:笔记详情数据开发手册
小红书笔记详情API可获取指定笔记的标题、正文、互动数据及多媒体资源,支持字段筛选与评论加载。通过note_id和access_token发起GET/POST请求,配合签名验证,广泛用于内容分析与营销优化。
|
4月前
|
JSON 监控 API
小红书笔记评论API:一键获取分层评论与用户互动数据
小红书笔记评论API可获取指定笔记的评论详情,包括内容、点赞数、评论者信息等,支持分页与身份认证,返回JSON格式数据,适用于舆情监控、用户行为分析等场景。
|
4月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
495 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
6月前
|
JSON API 数据格式
小红书笔记详情API响应数据解析
小红书笔记详情API可获取笔记核心数据,适用于内容分析与竞品监测。支持HTTP GET/POST请求,返回JSON格式数据,包含笔记标题、互动数据及作者信息。文档提供Python请求示例,建议添加异常重试机制,助力品牌营销与用户行为分析。
|
4月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
336 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
5月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
6月前
|
JSON 搜索推荐 API
小红书笔记列表API数据解析(附代码)
本内容介绍如何利用小红书开放平台的笔记列表API,批量获取与关键词或用户相关的笔记数据,包括标题、封面图、互动数据等。接口支持按关键词分页查询及排序筛选,适用于内容聚合与用户分析。附Python示例代码,演示通过GET请求调用API的方法,并处理返回的JSON数据。
|
6月前
|
JSON API 数据格式
小红书笔记详情API数据解析(附代码)
本内容介绍了小红书开放平台的笔记详情API接口功能,涵盖笔记标题、内容、互动数据及多媒体资源的获取方式。提供接口概述、请求方式及Python调用示例,适用于内容分析与营销策略优化,帮助开发者高效集成与使用。
|
5月前
|
数据管理 Linux iOS开发
Splunk Enterprise 9.4.5 (macOS, Linux, Windows) - 机器数据管理和分析
Splunk Enterprise 9.4.5 (macOS, Linux, Windows) - 机器数据管理和分析
177 0
|
6月前
|
数据采集 监控 搜索推荐
小红书电商 API 助力,小红书平台电商笔记营销效果量化
在数字化营销时代,小红书凭借用户生成内容推动电商转化,但营销效果常因数据碎片化难以衡量。本文探讨如何借助小红书电商 API,精准量化曝光量、点击率、转化率等关键指标,提升营销效率与投资回报率。
208 1