2016-09-19 15 views
1

私はperlスクリプトでフォークし、fork()の後に親プロセスから抜け出しています。子プロセスで 、その後、私は関数の中で、この方法でperlの子プロセスで一時ファイルを自動的に削除

my ($S_TEMP_FILE, $stmpfile) = tempfile(UNLINK => 1, DIR => $TMPDIR); 

を一時ファイルを作成しています今の問題は、私は、関数から出ていたときにこの一時ファイルは自動的に削除取得されていないことです。私はいくつかの一時ファイルをフォークする前に作成しましたが、機能の終了時に自動的に削除されています。私はこれに関するすべてのリンクを見てきましたが、私はこの動作の理由を理解することができません。

+8

親プロセスと子プロセスの両方でフォークと作成を含む[mcve]を追加してください。 – simbabque

答えて

3

ファイルはによって自動的に削除されます。サブルーチンが終了したときではなく、プログラムが終了すると自動的に削除されます。

プログラムが_exitを呼び出すか、シグナルによって殺された場合、プログラムはこれらのファイルを削除する機会を得られないことに注意してください。

ファイルをすぐに削除したい場合は、自分で削除するか、tempfileの代わりにFile::Temp->new()を使用する必要があります。 (File::Temp->new()によって作成されたファイルは、オブジェクトが破棄されると削除されます)

+0

help.Alsoありがとう、これらの2つの方法で一時ファイルを作成する間にも特別な違いはありますか? –

+0

それは唯一のものです – ikegami

+0

@サンチタガイ:あなたの問題を解決したら答えを受け入れることを親切に考えてください。参照:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

関連する問題