Pregunta

Hice lo siguiente:

nohup find / &

rm nohup.out

Curiosamente, el comando nohup continuó funcionando. Esperé que se creara un nuevo archivo. Para mi sorpresa no había tal archivo. ¿A dónde fue el stdout del comando?

¿Fue útil?

Solución

Eliminar un archivo en UNIX hace dos cosas:

  • Elimina la entrada del directorio para ello.
  • Si no hay procesos abiertos y no hay otras entradas de directorio (enlaces duros), libera el espacio.

Su proceso nohupped continuará con gusto escribiendo en el archivo que solía llamarse Nohup.out, pero ahora se conoce como nada más que un descriptor de archivo dentro de ese proceso.

Incluso puede hacer que otro proceso cree un nohup.out, no interferirá con el primero.

Cuando todos los enlaces duros se han ido y todos los procesos lo han cerrado, se recuperará el espacio del disco.

Otros consejos

Si elimina el nohup.out Archivo, el mango se perderá y se escribirá solo en el descriptor del archivo, pero si desea limpiar el nohup.out archivo y luego ejecuta esto

true > nohup.out

Eliminará el contenido del archivo pero no el archivo.

Ese es un comportamiento estándar en UNIX.

Cuando eliminó el archivo, se eliminó el último enlace en el sistema de archivos, pero el archivo aún estaba abierto y, por lo tanto, la salida de find (en este caso) fue escrito en bloques de disco en el grupo de amortiguadores del núcleo, y posiblemente incluso para el disco. Pero el archivo no tenía nombre. Cuando find Salido, sin proceso o archivo (inode) hizo referencia al archivo, por lo que se lanzó el espacio. Esta es una forma en que se crean archivos temporales que se desvanecerán cuando se creen un programa, abriendo el archivo y luego eliminándolo. (Esto supone que no necesita un nombre para el archivo; claramente, si necesita un nombre para lo temporal, esta técnica no funcionará).

cat /dev/null > nohup.out

de aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top