sig
  type bigint = Big_int.big_int
  type stat = {
    comm : string;
    state : char;
    ppid : int;
    pgrp : int;
    session : int;
    tty_nr : int;
    tpgid : int;
    flags : Procfs.bigint;
    minflt : Procfs.bigint;
    cminflt : Procfs.bigint;
    majflt : Procfs.bigint;
    cmajflt : Procfs.bigint;
    utime : Procfs.bigint;
    stime : Procfs.bigint;
    cutime : Procfs.bigint;
    cstime : Procfs.bigint;
    priority : Procfs.bigint;
    nice : Procfs.bigint;
    unused : Procfs.bigint;
    itrealvalue : Procfs.bigint;
    starttime : Procfs.bigint;
    vsize : Procfs.bigint;
    rss : Procfs.bigint;
    rlim : Procfs.bigint;
    startcode : Procfs.bigint;
    endcode : Procfs.bigint;
    startstack : Procfs.bigint;
    kstkesp : Procfs.bigint;
    signal : Procfs.bigint;
    blocked : Procfs.bigint;
    sigignore : Procfs.bigint;
    sigcatch : Procfs.bigint;
    wchan : Procfs.bigint;
    nswap : Procfs.bigint;
    cnswap : Procfs.bigint;
    exit_signal : int;
    processor : int;
    rt_priority : Procfs.bigint;
    policy : Procfs.bigint;
  }
  type statm = {
    size : Procfs.bigint;
    resident : Procfs.bigint;
    share : Procfs.bigint;
    text : Procfs.bigint;
    lib : Procfs.bigint;
    data : Procfs.bigint;
    dt : Procfs.bigint;
  }
  type status = { uid : int; euid : int; suid : int; fsuid : int; }
  type process = {
    pid : int;
    cmdline : string;
    cwd : string option;
    environ : string option;
    exe : string option;
    root : string option;
    stat : Procfs.stat;
    statm : Procfs.statm;
    status : Procfs.status;
    top_command : string;
  }
  val get_all_procs : unit -> Procfs.process list
  val with_pid : int -> Procfs.process
  val with_uid : int -> Procfs.process list
  val with_username : string -> Procfs.process list
  val hertz : float
  val memtotal : int
end