定時器簡單應用(掛起進程)

#include
#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");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章