質問
私は次のことをしました:
nohup find / &
rm nohup.out
奇妙なことに、Nohup -Commandは実行され続けました。新しいファイルが作成されるのを待っていました。驚いたことに、そのようなファイルはありませんでした。コマンドのstdoutはどこに行きましたか?
解決
UNIXでファイルを削除することは2つのことを行います。
- ディレクトリエントリを削除します。
- プロセスに開かれておらず、他のディレクトリエントリがそれを指していない場合(ハードリンク)、スペースが解放されます。
Nohuppedプロセスは、かつてnohup.outと呼ばれていたファイルに喜んで書き続けますが、現在はそのプロセス内のファイル記述子のみとして知られています。
別のプロセスを作成することもできます。
すべてのハードリンクがなくなり、すべてのプロセスがそれを閉じた場合、ディスクスペースは回復します。
他のヒント
削除する場合 nohup.out
ファイル、ハンドルは失われ、ファイル記述子にのみ書き込みますが、 nohup.out
ファイルはこれを実行するだけです
true > nohup.out
ファイルの内容は削除されませんが、ファイルは削除されません。
それはUNIXの標準的な動作です。
ファイルを削除すると、ファイルシステムの最後のリンクが削除されましたが、ファイルはまだ開いていたため、の出力は find
(この場合)は、カーネルバッファープールのディスクブロックに、さらにはディスクに書かれていました。しかし、ファイルには名前がありませんでした。いつ find
終了すると、プロセスまたはファイル(INODE)がファイルを参照していないため、スペースがリリースされました。これは、プログラムの終了時に消滅する一時的なファイルが、ファイルを開いてから削除することにより、一時的なファイルが消える1つの方法です。 (これは、ファイルに名前が必要ないと仮定します。明らかに、一時的な名前が必要な場合は、この手法は機能しません。)
cat /dev/null > nohup.out
から ここ