Articles
find: cant fork: No se puede asignar memoria
On noviembre 18, 2020 by adminQuiero eliminar 1 archivo a la vez de mi directorio que contiene tantos archivos, así que quiero eliminar 1 archivo a la vez. Solo para evitar demasiadas lecturas y fallar en demasiados argumentos.
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
No quiero eliminar de forma recursiva de un directorio secundario, por eso -maxdepth 1. ¿Alguna ayuda o sugerencia?
Comentarios
Respuesta
El cannot fork
puede aparecer cuando el área de intercambio está llena. El tmpfs
sistema de archivos (probablemente) montado en /tmp
podría no tener el espacio necesario para que el kernel cree nuevos procesos.
Compruebe si /tmp
todavía tiene espacio usando df -h /tmp
. Si está lleno, intente limpiar /tmp
primero.
Comentarios
- Swap y tmpfs no son relacionados excepto en que ambos son subconjuntos de memoria disponible. El espacio en
/tmp
no es necesario para crear nuevos procesos. Hay espacio en la memoria, pero la cantidad es tan pequeña que es muy poco probable que eliminar elementos en/tmp
haga posible una bifurcación. - / tmp ni siquiera se acerca a completo.
- @Gilles, en Solaris
/tmp
es realtmpfs
y cuando está completo (+ 100%) utilizado obtendráunable to fork; not enough space
mensajes. Los mensajes que recibe el OP soncannot fork; unable to allocate memory
. Disculpas por haber sugerido una solución de Solaris y no haber pedido el sistema operativo primero. El OP puede verificar los valores deulimit -a
yulimit -aH
para ver si hay un límite de memoria que se pueda alcanzar durante este proceso. También vale la pena intentar mirar/etc/security/limits.conf
para ver si se establecen algunos límites. - Tuve el mismo problema con mucho espacio disponible en / tmp, pero sin intercambio activado. [code] swapon / dev / sdXn [/ code] resolvió el problema.
-delete
en lugar de-exec rm {} \;
debería resolverlo. Aparte de eso, simplemente mueva-maxdepht 1
antes de-name
. No ' te olvides de probar sin-delete
primero.-exec ... '{}' \+
forma defind
podría ahorrar en bifurcaciones, ya que emulaxargs
en versiones (modernas) defind
.