Вы в значительной степени пытаетесь переосмыслить tar или подобные форматы архивации; не ожидайте делать вещи вручную для EA, чем использование существующих инструментов.
Если Вы настаиваете на пользовательской границе (который опасен, поскольку эта граница могла появиться естественно в одном из jpeg файлов), заставьте его запуститься и закончитесь новой строкой. Это упростит обработку с awk
.
Я рекомендую разделить каждый файл, но ограничить количество файлов на каталог к достаточно маленькому количеству, которое не вызывает хит производительности. С одним файлом каждые 5 секунд, вложенная структура дня/часа/минуты дает максимальное ветвление 366/60/20, который должен быть в порядке мудр производительностью.
Если Вы хотите использовать архивы, и, учитывая отсутствие r
команда в tar Busybox, Вы могли хранить файлы N в файловой системе, затем периодически сделать архив с существующими файлами и убрать большой список. Например, для создания архива каждыми 100 файлами:
set -- *
if [ $# -gt 100 ]; then
set ../archives/*.tar
eval "last=\${$#}"
last=${last%[!0-9]}; last=${last##[!0-9]}
tar cf ../archives/$((last+1)).tar -- *
rm -- *
fi
Наблюдение зомби имеет тенденцию указывать на ошибку в процессе, который породил их: тот процесс, как предполагается, пожинает зомби (путем вызова wait
) или явно проигнорируйте SIGCLD
(или набор SA_NOCLDWAIT
флаг).
Однако это - незначительная ошибка. Процессы-зомби только используют запись в таблице процессов, которая является незначительной суммой ресурсов. Проблема только становится значительной, если процесс оставляет тысячи зомби.
Вы не уничтожили родительский процесс зомби: иначе зомби ушел бы. Обработайте 29673 (родитель зомби) является все еще живым и здоровым (но нет wait
луг). Или это не Gvim, но некоторый подпроцесс его, или Вы закрыли окно Gvim, но программа все еще работает. Выполненный ps l 29673
видеть, каков этот процесс.
Если бы Вы непрерывно встречаетесь с процессом-зомби, я был бы склонен думать, что существует определенно что-то не так. Процесс-зомби действительно происходит. Я обычно вижу некоторых месяц в различных системах, которые я обслуживаю и на работе и домой.
Обычно они могут составляться из-за ошибки оператора или к проблеме с конкретной частью программного обеспечения. Перезагрузки обычно разрешают их, и они обычно не происходят снова в течение некоторого времени.
Если они беспокоят Вас, можно попытаться присоединить к их идентификатору родительского процесса (PPID) использование gdb
для наблюдения, что произошло или даже пытается уничтожить их:
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Если Вы до него, я прочитал эти дополнительные ресурсы ниже для других методов при попытке иметь дело с ними.
/mem
или другие ресурсы – так a gdb
бесполезно. (Если я понимаю это правильно).
– Zimzalabim
29.04.2013, 12:33
Это происходит каждый раз, когда Вы используете gvim? Работы gvim кроме отъезда зомби после того, как это выходит? Если это не вызывает настоящие проблемы, я просто проигнорировал бы его - зомби не облагают налогом ресурсы системы. Я не был бы удивлен, была ли это ошибка в gvim - или возможно в gtk, но если программа не работает вообще, я проигнорировал бы его.
Процесс зомби / более не существующий процесс обычно происходят, когда дочерний процесс выходит перед родительским запуском, слушая его. Ребенок "слоняется поблизости", потому что не было никакой программы вокруг для получения, это - статус выхода, даже при том, что это сделало завершенный удовлетворительный - следовательно это становится зомби. Другая причина Вы получаете зомби, может быть, когда большое дерево процесса прибывает, падая - возможно, потому что кто-то попытался уничтожить один или несколько процессов в дереве.
Зомби является действительно путем к ОС для хранения статуса выхода и другой информации о процессе, который не завершался вполне правильно вокруг, в случае, если кому-либо интересно. Кроме записи в таблице процессов, зомби не поднимает ресурсов (т.е. никакой памяти или CPU).
По моему скромному мнению, Википедия является неправильной - или по крайней мере легкой неправильно понять - когда она утверждает, что не пожинавшие зомби имеют в виду ошибку с ОС, если они задерживаются после основного процесса она была порождена выходами. Весьма обычно, что зомби выживает, это - родители, в этом случае это принято init
(PID 1). init
может в конечном счете пожинать его, но некоторые зомби - даже принятые init - могут остаться до перезагрузки. Пока у Вас нет такого количества зомби, что они заполнение таблица процессов, они - едва любая проблема.
Конечно, зомби действительно часто показывают, что что-то неправильно - что программа порождает ребенка, который умирает, прежде чем родитель ожидает - но это не должна быть ОС, которая является проблемой. Это, конечно, могут быть компоненты ОС, которые вызывают его хотя - например, отсутствие или malconfigured звуковой сервер, причины дочерние процессы, которые, как предполагают, обработали звук для программы для выхода сразу, таким образом слоняясь поблизости как зомби.
gdb
и т.п. gvim также часто загрязняет терминал чем-то как LIBDBUSMENU-GLIB-WARNING **: Trying to remove a child that doesn't believe we're it's parent.
– Но это только происходит на выходе. (или :q
). Зомби кажутся в то время как активными или спящими.
– Zimzalabim
29.04.2013, 12:50
init
будет пожинать зомби, как только это видит его.
– Gilles 'SO- stop being evil'
30.04.2013, 03:01
Как всегда - это зависит. Большинство контрольных инструментов станет желтым или красным из, они встречаются с больше, чем определенное число процессов-зомби.
Так в основном - да - это обычно - знак проблемы.
Но я видел программы, которые порождают процессы-зомби как часть их "нормальных" операций. Эти процессы-зомби ушли, когда согласно высокоуровневому API (я не говорю, что родительский процесс здесь) был назван с командой "выхода/выхода".
Таким образом в этих случаях кажется, что приложение заботилось (и возможно нуждался), эти зомби. Таким образом для контроля я должен был определить исключение на серверах, куда эти приложения работали.
В других случаях зомби ушли после короткого времени - таким образом, у Вас могут быть определенные состояния non-persistent-system с процессами-зомби.
В Вашем случае: Если gvim
сделан не должно быть никакого оставленного зомби - так propably ошибка.
В Unix/Linux новые процессы создаются fork(2)
системный вызов (или некоторые в сахаре - по версии его, или возможно другим вариантом clone(2)
). Это - обязанность родителя сделать вариант wait(2)
собрать статус выхода дочернего процесса (если родитель заканчивается перед ребенком, init(8)
добирается для заботы о висячей строке). Завершенный процесс, статус выхода которого не был собран, является зомби. Зомби являются знаком безответственного статуса родителя.
:q
Я искал PID, но не нашел его. Должно быть, ввел неправильно. (Очень смущающий). Тот процесс (29673) был не процессом Gvim без cmdline и 1 как PPID. Самая странная небольшая вещь. Но; узнали вполне немного о зомби, какой и почему так или иначе, таким образом, не полное поражение :) – Zimzalabim 30.04.2013, 13:32