Страница 1 из 1

Tprocess и ps -lax

СообщениеДобавлено: 10.09.2009 16:23:58
the_beginer
Доброго времени суток!
Давно я не был здесь, да и вообще за компьютером - сын у меня родился :)

Но вот после долгого перерыва я снова сел за программирование.
И почти сразу натолкнулся на такую вот проблему.

Есть задача: надо программно получить вывод команды
Код: Выделить всё
ps -lax

Это полная информация с процессах, запущенных в системе. Причем запущенные процессы, что важно для меня, показываются полностью, т.е. полный путь до файла + параметры. (далее полный путь)

казалось бы чего проще, ан нет. Нашел-таки пару подводных камней.
Итак, используем tprocess
Код: Выделить всё
uses ...  , process, CLASSES;
....
var AProcess : tprocess;
    astringlist : tstringlist;
...
begin
s := 'ps -lax';
AProcess := TProcess.Create(nil);
AProcess.CommandLine := s;
AProcess.Options := AProcess.Options + [powaitonexit, pousepipes];
AProcess.Execute;     
AStringList.LoadFromStream(Aprocess.output);
AProcess.free;

далее раскидываем итог по по ячейкам stringgrid ...


и получаем итог. В колонке, где отображается полный путь, вписываются только первые 11 символов, остальное отбрасывается (рис1).

Честно, я долго игрался с этим куском. Однако, победить не смог.
Может, подскажите, в чем причина и как исправить?

Re: Tprocess и ps -lax

СообщениеДобавлено: 11.09.2009 00:26:43
frost_asm
Методом проб вияснилось что виноват gdb. Если отключить его в опциях IDE, то должно отображатся нормально. Или запускать не из IDE.

Re: Tprocess и ps -lax

СообщениеДобавлено: 11.09.2009 05:14:04
the_beginer
хм, действительно. Запомним на будущее, что результат работы через IDE и из консоли может отличаться.
frost_asm, спасибо

Стоит ли писать Мартину?

Re: Tprocess и ps -lax

СообщениеДобавлено: 11.09.2009 10:33:55
Dmitry
Насколько я помню, можно добавить еще ключик -w, чтобы список процессов не обрезался по длине строки. По крайней мере во FreeBSD так работает.