diff -Naur monit-4.7/process/sysdep_DARWIN.c monit-4.7-darwinpatch/process/sysdep_DARWIN.c
--- monit-4.7/process/sysdep_DARWIN.c	2006-01-01 17:44:02.000000000 -0500
+++ monit-4.7-darwinpatch/process/sysdep_DARWIN.c	2006-03-30 10:37:47.000000000 -0500
@@ -52,6 +52,8 @@
 #include <mach/mach_host.h>
 #endif
 
+#include <mach/task.h>
+#include <mach/mach_init.h>
 
 #include "monitor.h"
 #include "process.h"
@@ -83,6 +85,15 @@
 
 /* ------------------------------------------------------------------ Public */
 
+void getres(task_t task, unsigned int *rss)
+{
+    struct task_basic_info t_info;
+    mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
+
+    task_info(task, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count);
+    *rss = t_info.resident_size;
+}
+
 
 int init_process_info_sysdep(void) {
   int              mib[2];
@@ -142,6 +153,8 @@
   static kvm_t      *kvm_handle;
   ProcessTree_T     *pt;
   struct kinfo_proc *pinfo;
+  unsigned int rss;
+  task_t task = MACH_PORT_NULL;
 
   if(getuid()!=0) {
     log("system statistic error -- permission denied\n");
@@ -171,7 +184,10 @@
     pt[i].cputime   = (long)((pinfo[i].kp_proc.p_rtime.tv_sec * 10) +
                              (pinfo[i].kp_proc.p_rtime.tv_usec / 100000)
                             );
-    pt[i].mem_kbyte = (unsigned long)(pinfo[i].kp_eproc.e_vm.vm_rssize * pagesize_kbyte);
+	task_for_pid(current_task(), pt[i].pid, &task);
+	getres(task, &rss);
+	pt[i].mem_kbyte = (rss/1024);
+//	pt[i].mem_kbyte = (unsigned long)(pinfo[i].kp_eproc.e_vm.vm_rssize * pagesize_kbyte);
     if(pinfo[i].kp_proc.p_stat == SZOMB)
     {
       pt[i].status_flag |= PROCESS_ZOMBIE;
