"Roger" == Roger  <a_ver_est at yahoo.com> writes:

Roger> I am a newbie in solaris kernel knowledge, so i am sorry if my
Roger> question is too stupid.

Roger> I have a process that's is using the system call poll all the
Roger> time. I want to know which file descriptor is "polling".

Roger> Form headers i got this information.
Roger> poll.h

Roger> int poll(struct pollfd *, nfds_t, int);

Roger> typedef struct pollfd {
Roger>          int fd;                         /* file desc to poll */
Roger>          short events;                   /* events of interest on fd */
Roger>          short revents;                  /* events that occurred on fd */
Roger>     } pollfd_t;

Roger> I have done a truss to the process I can see the poll call:

Roger> 7640/1:          0.0148 poll(0xFFFFFFFF7FFF0990, 1, 0)                  
= 0

Have you tried "truss -v poll"?  It may be that truss already knows
how to interpret struct pollfd *.

Another way is to use dtrace to grab the first argument and print it.

Roger> So I run scat and try to dump the pointer to the pollfd
Roger> structure, but it doesn't work.

Roger> SolarisCAT(live)> sdump 0xFFFFFFFF7FFF0990 pollfd
Roger> read failed for pollfd: 8 bytes @ 0xffffffff7fff0990: Invalid argument

The address is in user space, and scat is trying to interpret it as a
kernel space address.  In fact, since that looks like a stack address
to me, I'd say unless you capture it at the right time, it may already
be overwritten by the time you look.  A tool like truss or dtrace will
probably work more reliably in this case.
-- 
Dave Marquardt
Sun Microsystems, Inc.
Austin, TX
+1 512 401-1077 (SUN internal: x64077)

Reply via email to