not sure how u wrote your module.....want to post your code here?

>From kernel/timer.c:

 373 void __timer_stats_timer_set_start_info(struct timer_list *timer,
void *addr)
 374 {
 375         if (timer->start_site)
 376                 return;
 377
 378         timer->start_site = addr;
 379         memcpy(timer->start_comm, current->comm, TASK_COMM_LEN);
 380         timer->start_pid = current->pid;
 381 }

the answer is obvious......i suspect u got your global variable
"current" wrongly.

look into:

./arch/x86/kernel/cpu/common.c:
EXPORT_PER_CPU_SYMBOL(current_task);

u can see that "current_task" is per-CPU and is exported, ie,
different CPU may be executing different task.

so, from ./Documentation/uml/UserModeLinux-HOWTO.txt:
       (gdb) p current_task.pid
       (gdb) p current_task.prev_task.comm
       (gdb) p current_task.prev_task.thread

Or inside your kernel module....just do current_task->comm will do, as
the symbol is exported.

But I cannot find EXPORT declaration for "current", so your kernel
module cannot access the global variable directly - roundabout way
needed.

But if you compile your codes + kernel together, NOT USING KERNEL
MODULE, then access any global variable (eg, current) is possible.


On Mar 22, 10:42 am, perumal316 <[email protected]> wrote:
> Hi,
>
> Is there any way to get the current process ID and the corresponding
> name of the application from the kernel module?
>
> I have tried using task->comm ,task->pid, current->pid etc But I am
> not getting the correct process ID.
>
> I want to printk the process ID and the application name each time a
> system call is called. System call should have a way to identify which
> process ID or application is calling it.
>
> Any other way to printk the process ID and the application name?
>
> Thanks In Advance,
> Perumal

To unsubscribe from this group, send email to 
linuxkernelnewbies+unsubscribegooglegroups.com or reply to this email with the 
words "REMOVE ME" as the subject.

Reply via email to