Articles
find: nie może rozwidlić: nie można przydzielić pamięci
On 18 listopada, 2020 by adminChcę usunąć jeden plik naraz z mojego katalogu zawierającego tak wiele plików, więc chcę usunąć 1 plik naraz. Żeby uniknąć zbyt wielu odczytów i nie powiodło się przy zbyt wielu argumentach.
find ./Backup/ -name "*.csv" -maxdepth 1 -exec rm {} \; find: warning: you have specified the -maxdepth option after a non-option argument -name, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments. find: cannot fork: Cannot allocate memory
Nie chcę usuwać rekurencyjnie z katalogu podrzędnego, dlatego -maxdepth 1. Masz jakąś pomoc i sugestię?
Komentarze
Odpowiedź
cannot fork
może pojawić się komunikat, gdy obszar wymiany jest pełny. System plików tmpfs
(prawdopodobnie) zamontowany na /tmp
może nie mieć wystarczającej ilości miejsca na jądro do tworzenia nowych procesów.
Sprawdź, czy w /tmp
jest jeszcze wolne miejsce, używając df -h /tmp
. Jeśli jest pełny, spróbuj najpierw wyczyścić /tmp
.
Komentarze
- Zamiana i tmpf nie są powiązane z tym, że oba są podzbiorami dostępnej pamięci. Miejsce w
/tmp
nie jest konieczne do tworzenia nowych procesów. Miejsce w pamięci jest, ale ilość jest tak mała, że usunięcie rzeczy w/tmp
prawdopodobnie nie umożliwi rozwidlenia. - / tmp nie jest nawet blisko pełny.
- @Gilles, W systemie Solaris
/tmp
jest rzeczywistytmpfs
i kiedy jest całkowicie (+ 100%) wykorzystane, otrzymaszunable to fork; not enough space
wiadomości. Komunikaty otrzymane przez OP tocannot fork; unable to allocate memory
. Przepraszam, że zasugerowałem rozwiązanie Solaris i nie zapytałem najpierw o system operacyjny. OP może sprawdzić wartościulimit -a
iulimit -aH
, aby sprawdzić, czy istnieje limit pamięci, który można osiągnąć podczas tego procesu. Warto również spojrzeć na/etc/security/limits.conf
, aby sprawdzić, czy są ustawione jakieś limity. - Miałem ten sam problem z dużą ilością wolnego miejsca w / tmp, ale nie aktywowano zamiany. [kod] swapon / dev / sdXn [/ code] rozwiązał problem.
-delete
zamiast-exec rm {} \;
powinno go rozwiązać. Poza tym po prostu przesuń-maxdepht 1
przed-name
. Nie ' nie zapomnij o testowaniu bez-delete
pierwszy.-exec ... '{}' \+
formafind
może oszczędzać na widelcach, ponieważ emulujexargs
w (nowoczesnych) wersjachfind
.