Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как узнать расход памяти процессом?

01.01.2007

Расход памяти можно прочитать из виртуального файла

/proc/Pid/status

где Pid - номер процесса

function ReadProcData(Pid:string; var VmSize, VmLck, VmRSS, VmData, VmStk, VmExe, VmLib, ProcName:string):boolean;
  var f:TextFile;
      s, stat:string;
      i:integer;
 
  function getbefore(substr, str:string):string;
  begin
    if pos(substr,str)>0 then result:=copy(str,1,pos(substr,str)-1)
    else result:='';
  end;
 
  function getafter(substr, str:string):string;
  begin
    if pos(substr,str)>0 then result:=copy(str,pos(substr,str)+length(substr),length(str))
    else result:='';
  end;
 
begin
  Result:=False;
  FileMode:=0;
  VmSize:='-1'; VmLck:='-1'; VmRSS:='-1'; VmData:='-1'; VmStk:='-1'; VmExe:='-1'; VmLib:='-1'; ProcName:='';
  try
    try
      try
        assignFile(f,'/proc/'+Pid+'/status');
        reset(f);
        while not eof(f) do
          begin
            readln(f, s);
            if pos('VmSize', s)>0 then VmSize:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmLck', s)>0 then VmLck:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmRSS', s)>0 then VmRSS:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmData', s)>0 then VmData:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmStk', s)>0 then VmStk:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmExe', s)>0 then VmExe:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('VmLib', s)>0 then VmLib:=GetBefore(' ',trim(GetAfter(':',s)));
            if pos('Name', s)>0 then ProcName:=trim(GetAfter(':',s));
          end;
      finally
        closefile(f);
      end;
    finally
      FileMode:=2;
    end;
    Result:=True;
  except
  end;
end;

Примечание

Функция может и не сработать, какие-то мгновения файл недоступен по чтению, выход - повторить процедуру.

Более подробную информацию можно получить запустив в консоле:

man proc

Автор: Vit