Rimozione del -file nohup durante l'esecuzione
-
18-09-2019 - |
Domanda
Ho fatto la seguente:
nohup find / &
rm nohup.out
Stranamente, il nohup -command continuato a correre. Ho atteso per un nuovo file da creare. Per la mia sorpresa non c'era tale file. Da dove viene lo stdout del comando andare?
Soluzione
La rimozione di un file in UNIX fa due cose:
- rimuove la voce di directory per esso.
- se nessun processo l'hanno aperto e altre voci di directory punto ad esso (hard link), rilascia lo spazio.
Il vostro processo nohupped sarà lieto di continuare a scrivere sul file che si chiamava nohup.out, ma ora è conosciuto come nient'altro che un descrittore di file all'interno di tale processo.
Si può anche avere un altro processo di creare un nohup.out, non interferirà con il primo.
Quando tutti i collegamenti reali sono andati, e tutti i processi hanno chiuso esso, lo spazio su disco sarà recuperato.
Altri suggerimenti
se si vuole eliminare il file nohup.out
, la maniglia sarà perso e sarà scrivere solo per il descrittore di file, ma se si vuole pulire il file nohup.out
poi basta eseguire questo
true > nohup.out
si cancellerà il contenuto del file, ma non il file.
Questo è il comportamento standard su Unix.
Quando è stato rimosso il file, l'ultimo anello nel file system è stato rimosso, ma il file era ancora aperto e quindi l'uscita di find
(in questo caso) è stato scritto per blocchi del disco nel pool di buffer del kernel, e forse anche su disco. Ma il file non aveva un nome. Quando uscì find
, nessun processo o un file (inode) fa riferimento il file, quindi lo spazio è stato rilasciato. Questo è un modo che i file temporanei che spariranno quando vengono creati un programma uscite - aprendo il file e poi rimuoverlo. (Questo presuppone che non è necessario un nome per il file,. Chiaramente, se avete bisogno di un nome per la temporanea, questa tecnica non funzionerà)
cat /dev/null > nohup.out