일부 임시 파일을 생성하는 상당히 긴 bash 프로세스가 있는데 그 중 일부는 이름과 거의 임의의 이름을 생성했습니다.
프로세스가 실패한 후 수동으로 삭제하는 것을 방지하고 싶습니다. PID가 끝나면 "자동 삭제"되는 임시 디렉터리(예: PID에 연결된 디렉터리)가 있습니까? 그렇지 않다면 큰 도움이 될 것입니다.
한 가지 접근 방식은 이 디렉터리를 전역 임시 디렉터리로 생성하여 사용하는 것입니다. 그러나 이 디렉터리는 프로세스가 비정상적으로 종료된 후에도 그대로 유지됩니다 mkdir /tmp/$$
./tmp
나는 사용하고 싶었지만 trap "rm -rf /tmp/$$" EXIT
그것도 작동하지 않았고 트랩을 사용했습니다... RETURN이 너무 광범위합니다.
나는 모든 쉘이나 다른 사용자 프로그램에서 사용할 수 있는 일반적인 것을 찾고 있습니다.
임시 디렉토리가 존재합니까, 예, 아니오입니까?
답변1
내가하는 방법은 다음과 같습니다
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
나는 잘 작동하는 몇 가지 사용 사례를 시도했습니다.
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
echo "$tempdir"
sleep infinity
찾아서 ( )하면 PID
CTRL +C(SIGINT)를 사용하면 정리됩니다 .kill
SIGTERM
$tempdir
$tempdir
또 다른 예는 다음과 같습니다.
tempdir=$(mktemp -d)
function cleanup {
rm -rf "$tempdir"
}
trap cleanup EXIT
trap cleanup SIGINT
echo "$tempdir"
set -e
/bin/false
이것은 "프로세스 실패"를 시뮬레이션합니다. false
반환 되면 set -e
이 스크립트는 종료됩니다. 트랩은 마지막에 계속 호출되며 디렉토리는 계속 삭제됩니다.
캡처해야 할 다른 상황이 있는 경우 더 많은 신호를 추가할 수 있습니다. 이것이 작동하지 않는 다른 사용 사례가 있습니까?
캡처할 수 없는 유일한 것은 입니다 SIGKILL
.