Cukup sering, kami menjalankan executable yang perlu menulis / membaca beberapa file sementara. Kami biasanya membuat direktori sementara, menjalankan executable di sana, dan menghapus direktori ketika skrip selesai.
Saya ingin menghapus direktori bahkan jika executable terbunuh. Saya mencoba membungkusnya:
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
/usr/local/bin/my_binary
Ketika my_binarymati, proses terakhir kernel akan menghapus direktori, karena skrip adalah proses terakhir yang menahannya inode; tapi saya tidak bisa membuat file apa pun di direktori yang dihapus.
#!/bin/bash
dir=$(mktemp -d /tmp/foo.XXXXXXX) && cd $dir && rm -rf $dir
touch file.txt
output touch: file.txt: No such file or directory
Yang terbaik yang bisa saya lakukan adalah menghapus direktori temp ketika proses mati, menangkap sinyal yang paling umum, dan menjalankan proses pembersihan dengan cron:
#!/bin/bash
dir=$(mktemp -d /tmp/d.XXXXXX) && cd "$dir" || exit 99
trap 'rm -rf "$dir"' EXIT
/usr/local/bin/my_binary
Apakah ada beberapa cara sederhana untuk membuat direktori yang benar-benar sementara yang akan dihapus secara otomatis ketika biner saat ini mati, tidak peduli apa?
cleanupdapat dieksekusi sebelum mktemp selesai. Anda mungkin inginunset dirsebelum mengatur jebakan.