This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[Bug tapsets/6525] need utrace task-finder-based pid->execname, pid->cwd-path-name tables
- From: "wenji dot huang at oracle dot com" <sourceware-bugzilla at sourceware dot org>
- To: systemtap at sources dot redhat dot com
- Date: 26 Feb 2009 09:35:38 -0000
- Subject: [Bug tapsets/6525] need utrace task-finder-based pid->execname, pid->cwd-path-name tables
- References: <20080516134833.6525.fche@redhat.com>
- Reply-to: sourceware-bugzilla at sourceware dot org
------- Additional Comments From wenji dot huang at oracle dot com 2009-02-26 09:35 -------
I once tried to implement the functions using task_finder. The basic code is
like the following
#include "task_finder.c"
static char _stp_taskname[TASK_COMM_LEN]="";
static int _stp_process_search_cb(struct stap_task_finder_target *tgt, struct
task_struct *tsk, int register_p, int process_p) {
if (register_p) { /* found one match */
if (tsk == NULL) {
strlcpy(_stp_taskname, "UNKNOWN", MAXSTRINGLEN);
return 1;
} else {
strlcpy(_stp_taskname, tsk->comm, MAXSTRINGLEN);
return 0;
}
}
return 1;
}
function pid2execname2:string(pid:long) %{ /* pure */
struct stap_task_finder_target tgt;
tgt.pathname = NULL;
tgt.pid = (pid_t)(long)THIS->pid;
tgt.callback = &_stp_process_search_cb;
tgt.vm_callback = NULL;
stap_register_task_finder_target(&tgt);
stap_start_task_finder();
strlcpy(THIS->__retvalue, _stp_taskname, MAXSTRINGLEN);
stap_stop_task_finder();
CATCH_DEREF_FAULT();
%}
But it can't return the execname of most running processes like init, mingetty,
kjournald because the callback is never invoked.
Only works fine on my forked test process. My box is 2.6.27.9-159.fc10.i686.
Did I miss something or misunderstand the mechanism?
--
http://sourceware.org/bugzilla/show_bug.cgi?id=6525
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.