lkml.org 
[lkml]   [2005]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: Signals/ Communication from kernel to user!
Date
> 
>
> Hello,
> We wanted to establish a communication from kernel module (possibly a
> driver) to a user level process.
>
> Wanted to know whether signals can be used for this purpose OR there any
> other (better) methods of communication??
>
a bit brute force but you can simply run through the task list and kick
the pid of your user-space app (example for 2.4 kernel):

hofrat

---snip---
/*
* Copywrite 2002 Der Herr Hofrat
* License GPL V2
* Author der.herr@hofr.at
*/
/*
* run through the task list of linux search for the passed pid and send it
* a SIGKILL . run as insmod pid=# to send process with pid # a kill signal
*/
#include <bits/signum.h> /* signal number macros SIGHUP etc. */
#include <linux/kernel.h> /* printk level */
#include <linux/module.h> /* kernel version etc. */
#include <linux/sched.h> /* task_struct */
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Der Herr Hofrat");
MODULE_DESCRIPTION("Signal to a user-space app from a kernel module");

int pid=0;
MODULE_PARM(pid,"i");
int
ksignal(int pid,int signum)
{
struct task_struct *p;
/* run through the task list of linux until we find our pid */
for_each_task(p){
if(p->pid == pid){
printk("sending signal %d for pid %d\n",signum,(int)p->pid);
/* don't have a sig_info struct to send along - pass 0 */
return send_sig(signum,p,0);
}
}
/* did not find the requested pid */
return -1;
}
int
init_module(void)
{
/* send pid a SIGKILL */
ksignal(pid,SIGKILL);
return 0;
}
void
cleanup_module(void)
{
printk("out of here\n");
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2005-03-22 14:10    [from the cache]
©2003-2011 Jasper Spaans