Мой вопрос лучше всего иллюстрируется этим примером кода PHP:
$file = fopen($filePath, "wb");
if($file !== false)
{
//Obtain exclusive lock
if(flock($file, LOCK_EX))
{
//Script times out or is terminated here
//say, due to it using too much RAM, etc.
//...
//Release exclusive lock
flock($file, LOCK_UN);
}
fclose($file);
}
Что будет с замком?
Я только что сделал пару тестов на следующем общем сервере:
PHP Version 5.4.34
Linux 3.12.35.1418868052 #1 SMP x86_64
И мой вывод заключается в том, что файл блокируется выпущены автоматически после завершения работы скрипта, даже в случае фатальной ошибки, ошибки тайм-аута или нехватки памяти, которая завершает работу скрипта, или если я закомментирую flock($file, LOCK_UN);
функция.
Я действительно думаю, что это не выпущено автоматически. Чтобы ваш скрипт не удерживал файл в заблокированном состоянии, вам нужно зарегистрировать обратный вызов выключения и разблокировать все заблокированные файлы.
register_shutdown_function('unlock_files');
где clean_state — это функция, которая просматривает все ваши заблокированные файлы (поэтому вам нужно отслеживать их) и разблокировать их.
Функция выключения вызывается при возникновении фатальной ошибки, тайм-аута или ошибки нехватки памяти.