定时器简单应用(挂起进程)

#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/timer.h>
#include <linux/kernel.h>
struct timer_list stimer; //定义定时器
int timeout = 10 * HZ;
static void time_handler(unsigned long data){ //定时器处理函数,执行该函数获取挂起进程的pid,唤醒该进程
struct task_struct *p = (struct task_struct *)data;//参数为挂起进程pid
printk("11111111111111111111111\n");
wake_up_process(p);//唤醒进程
printk("11111current jiffies is %ld\n", jiffies); //打印当前jiffies
}
static int __init timer_init(void){ //定时器初始化过程
printk("My module worked!\n");
init_timer(&stimer);
stimer.data = (unsigned long)current; //将当前进程的pid作为参数传递
stimer.expires = jiffies + timeout; //设置到期时间
stimer.function = time_handler;
add_timer(&stimer);
printk("222222current jiffies is %ld\n", jiffies);
set_current_state(TASK_INTERRUPTIBLE);
printk("2222222222222222222222\n");
schedule(); //挂起该进程
printk("333333333333333333333\n");
del_timer(&stimer); //删除定时器
return 0;
}
static void __exit timer_exit(void){
printk("Unloading my module.\n");
return;
}
module_init(timer_init);//加载模块
module_exit(timer_exit);//卸载模块
MODULE_AUTHOR("fyf");
MODULE_LICENSE("GPL");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值