text: /**
   * \file
   */
  
  #ifndef __MONO_PROC_LIB_H__
  #define __MONO_PROC_LIB_H__
  /*
   * Utility functions to access processes information and other info about the system.
   */
  
  #include <glib.h>
  #include <mono/utils/mono-compiler.h>
  #include <mono/utils/mono-publib.h>
  
  /* never remove or reorder these enums values: they are used in corlib/System */
  
  typedef enum {
  	MONO_PROCESS_NUM_THREADS,
  	MONO_PROCESS_USER_TIME, /* milliseconds */
  	MONO_PROCESS_SYSTEM_TIME, /* milliseconds */
  	MONO_PROCESS_TOTAL_TIME, /* milliseconds */
  	MONO_PROCESS_WORKING_SET,
  	MONO_PROCESS_WORKING_SET_PEAK, /* 5 */
  	MONO_PROCESS_PRIVATE_BYTES,
  	MONO_PROCESS_VIRTUAL_BYTES,
  	MONO_PROCESS_VIRTUAL_BYTES_PEAK,
  	MONO_PROCESS_FAULTS,
  	MONO_PROCESS_ELAPSED, /* 10 */
  	MONO_PROCESS_PPID,
  	MONO_PROCESS_PAGED_BYTES,
  	MONO_PROCESS_END
  } MonoProcessData;
  
  typedef enum {
  	MONO_CPU_USER_TIME,
  	MONO_CPU_PRIV_TIME,
  	MONO_CPU_INTR_TIME,
  	MONO_CPU_DCP_TIME,
  	MONO_CPU_IDLE_TIME,
  	MONO_CPU_END
  } MonoCpuData;
  
  typedef enum {
  	MONO_PROCESS_ERROR_NONE, /* no error happened */
  	MONO_PROCESS_ERROR_NOT_FOUND, /* process not found */
  	MONO_PROCESS_ERROR_OTHER
  } MonoProcessError;
  
  typedef struct _MonoCpuUsageState MonoCpuUsageState;
  #ifndef HOST_WIN32
  struct _MonoCpuUsageState {
  	gint64 kernel_time;
  	gint64 user_time;
  	gint64 current_time;
  };
  #else
  struct _MonoCpuUsageState {
  	guint64 kernel_time;
  	guint64 user_time;
  	guint64 idle_time;
  };
  #endif
  
  gpointer* mono_process_list     (int *size);
  
  void      mono_process_get_times (gpointer pid, gint64 *start_time, gint64 *user_time, gint64 *kernel_time);
  
  char*     mono_process_get_name (gpointer pid, char *buf, int len);
  
  gint64    mono_process_get_data (gpointer pid, MonoProcessData data);
  gint64    mono_process_get_data_with_error (gpointer pid, MonoProcessData data, MonoProcessError *error);
  
  int       mono_process_current_pid (void);
  
  MONO_API int       mono_cpu_count    (void);
  gint64    mono_cpu_get_data (int cpu_id, MonoCpuData data, MonoProcessError *error);
  gint32    mono_cpu_usage (MonoCpuUsageState *prev);
  
  int       mono_atexit (void (*func)(void));
  
  #endif /* __MONO_PROC_LIB_H__ */
  
  