Re: OpenVZ, VServer и полудесяток
On Mon, Dec 24, 2007 at 01:42:54PM +0300, Artem Chuprina wrote:
> Alexey Pechnikov -> debian-russian@lists.debian.org @ Mon, 24 Dec 2007 12:19:52 +0300:
> AP> Из шелла писал _одну_ строку - rm /test_1000000/*. И
> AP> аргумент "/test_1000000/*" всего один, откуда возьмется "Argument list too
> AP> long?"
>
> Из мана на используемый шелл, а что?
>
> Не, судя по отсутствию "Argument list too long" этот rm - builtin, и
> шелл, как следствие, скорее всего, busybox... И именно в его исходники
> и надо смотреть.
Во-первых, ограничение размера аргументов -- это ограничение execve(),
статус возврата E2BIG. В линуксе традиционно был лимит в 128KB. Шелл
сначала раскручивает *, затем делает fork() и попытку execve("/bin/rm").
Во-вторых, я сильно сомневаюсь, что есть нормальный (не-busybox'овый)
шелл, у которого "rm" -- встроенная команда. Потому что исторически
у rm есть немало опций, разбирать которые шеллом замучаешься...
Да и нет, собственно, причин делать rm встроенным.
А тормоза у Печникова, наверное, из-за того, что шелл * пакует в
монолитную строку через realloc(), а тикл пользуется чанковыми строками.
Но и это не предел оптимизации. Думаю, perl с unlink() в реверсном цикле
уделает этот тикль как бог черепаху... :-)
--
Eugene Berdnikov
Reply to: