Articles
find: cannot fork: kan geen geheugen toewijzen
Geplaatst op november 18, 2020 door adminIk wil 1 bestand tegelijk verwijderen uit mijn directory die zoveel bestanden bevat, dus ik wil er 1 verwijderen bestand tegelijk. Gewoon om te veel leesbewerkingen te vermijden en mislukt bij te veel argumenten.
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
Ik wil niet recursief verwijderen uit een onderliggende directory, daarom -maxdepth 1. Alle hulp en suggesties?
Reacties
Antwoord
De cannot fork
kan verschijnen wanneer het ruilgebied vol is. Het tmpfs
bestandssysteem (waarschijnlijk) aangekoppeld op /tmp
heeft mogelijk niet de benodigde ruimte voor de kernel om nieuwe processen te maken.
Controleer of /tmp
nog ruimte heeft met df -h /tmp
. Als het vol is, probeer dan eerst /tmp
op te ruimen.
Reacties
- Swap en tmpfs zijn niet gerelateerd, behalve dat ze beide subsets van beschikbaar geheugen zijn. Ruimte in
/tmp
is niet nodig om nieuwe processen te creëren. Er is ruimte in het geheugen, maar de hoeveelheid is zo klein dat het zeer onwaarschijnlijk is dat het verwijderen van dingen in/tmp
een splitsing mogelijk maakt. - / tmp is niet eens in de buurt van vol.
- @Gilles, op Solaris
/tmp
is actueeltmpfs
en wanneer het volledig is (+ 100%) gebruikt krijg jeunable to fork; not enough space
berichten. De berichten die het OP krijgt zijncannot fork; unable to allocate memory
. Excuses dat ik een Solaris-oplossing heb voorgesteld en niet eerst om het besturingssysteem heb gevraagd. Het OP kan de waarden vanulimit -a
enulimit -aH
controleren om te zien of er een geheugenlimiet is die tijdens dit proces kan worden bereikt. Het is ook de moeite waard om te kijken naar/etc/security/limits.conf
om te zien of er limieten zijn ingesteld. - Ik heb hetzelfde probleem gehad met veel beschikbare ruimte in / tmp, maar geen swap geactiveerd. [code] swapon / dev / sdXn [/ code] heeft het probleem opgelost.
-delete
in plaats van-exec rm {} \;
zou het moeten oplossen. Anders dan dat, verplaats je gewoon-maxdepht 1
vóór-name
. Vergeet ' niet te testen zonder-delete
eerst.-exec ... '{}' \+
vorm vanfind
zou kunnen besparen op forks, aangezien ditxargs
in (moderne) versies vanfind
.