Beispiel #1
0
gboolean
mono_debugger_libgtop_glue_get_memory (int pid, LibGTopGlueMemoryInfo *info)
{
	char buffer [BUFSIZ], *p;

	if (proc_stat_to_buffer (buffer, sizeof buffer, pid))
		return FALSE;

	p = proc_stat_after_cmd (buffer);
	if (!p) return FALSE;

	p = skip_multiple_token (p, 20);

	info->vsize    = strtoull (p, &p, 0);
	info->rss      = strtoull (p, &p, 0);
	info->rss_rlim = strtoull (p, &p, 0);

	if (proc_statm_to_buffer (buffer, sizeof buffer, pid))
		return FALSE;

	info->size     = strtoull (buffer, &p, 0);
	info->resident = strtoull (p, &p, 0);
	info->share    = strtoull (p, &p, 0);

	return TRUE;
}
Beispiel #2
0
void
glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf,
			    pid_t pid)
{
	char buffer [BUFSIZ], *p;
	const size_t pagesize = getpagesize();

	memset (buf, 0, sizeof (glibtop_proc_segment));

	if (proc_stat_to_buffer(buffer, sizeof buffer, pid))
		return;

	p = proc_stat_after_cmd (buffer);
	if (!p) return;

	p = skip_multiple_token (p, 23);

	buf->start_code  = strtoull (p, &p, 0);
	buf->end_code    = strtoull (p, &p, 0);
	buf->start_stack = strtoull (p, &p, 0);

	buf->flags = _glibtop_sysdeps_proc_segment;

	if (proc_statm_to_buffer(buffer, sizeof buffer, pid))
		return;

	p = skip_multiple_token (buffer, 3);

	/* This doesn't work very well due to a bug in the Linux kernel.
	 * I'll submit a patch to the kernel mailing list soon. */

	buf->text_rss   = strtoull (p, &p, 0);
	buf->shlib_rss  = strtoull (p, &p, 0);
	buf->data_rss   = strtoull (p, &p, 0);
	buf->dirty_size = strtoull (p, &p, 0);

	buf->text_rss   *= pagesize;
	buf->shlib_rss  *= pagesize;
	buf->data_rss   *= pagesize;
	buf->dirty_size *= pagesize;

	buf->flags |= _glibtop_sysdeps_proc_segment_statm;
}