Articles
find: cant fork: Impossibile allocare memoria
Su Novembre 18, 2020 da adminVoglio eliminare 1 file alla volta dalla mia directory che contiene così tanti file, quindi voglio rimuoverne 1 file alla volta. Solo per evitare troppe letture e fallire con troppi argomenti.
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
Non voglio eliminare in modo ricorsivo da una directory figlia, ecco perché -maxdepth 1. Qualche aiuto e suggerimento?
Commenti
Rispondi
Il cannot fork
potrebbe apparire quando larea di scambio è piena. Il tmpfs
filesystem (probabilmente) montato su /tmp
potrebbe non avere lo spazio necessario per il kernel per creare nuovi processi.
Controlla se /tmp
dispone ancora di spazio utilizzando df -h /tmp
. Se è pieno, prova prima a pulire /tmp
.
Commenti
- Swap e tmpfs non lo sono correlati tranne che per il fatto che sono entrambi sottoinsiemi di memoria disponibile. La stanza in
/tmp
non è necessaria per creare nuovi processi. Lo spazio in memoria lo è, ma la quantità è così piccola che è molto improbabile che la rimozione di elementi in/tmp
renda possibile un fork. - / tmp non è nemmeno vicino a pieno.
- @Gilles, Su Solaris
/tmp
ètmpfs
effettivo e quando è completamente (+ 100%) utilizzato riceveraiunable to fork; not enough space
messaggi. I messaggi che lOP riceve sonocannot fork; unable to allocate memory
. Mi scuso per aver suggerito una soluzione Solaris e non aver chiesto prima il sistema operativo. LOP potrebbe controllare i valori diulimit -a
eulimit -aH
per vedere se cè un limite di memoria che può essere raggiunto durante questo processo. Vale anche la pena provare a guardare/etc/security/limits.conf
per vedere se sono stati impostati alcuni limiti. - Ho avuto lo stesso problema con molto spazio disponibile in / tmp, ma nessuno scambio attivato. [code] swapon / dev / sdXn [/ code] ha risolto il problema.
-delete
invece di-exec rm {} \;
dovrebbe risolverlo. A parte questo, basta spostare-maxdepht 1
prima di-name
. Non ' dimenticare di testare senza-delete
prima.-exec ... '{}' \+
forma difind
potrebbe risparmiare sui fork, poiché emulaxargs
nelle versioni (moderne) difind
.