> 
> 
> 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 [EMAIL PROTECTED]
 */
/*
 * 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 [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to