Этот очень короткий код будет зависать до тех пор, пока файл блокировки в / tmp, названный в честь вашего скрипта, будет заблокирован исключительно:
File.open("/tmp/#{File.basename $0}.lock", File::RDWR|File::CREAT, 0644).flock(File::LOCK_EX)
Любая другая программа, блокирующая его, Ruby или нет, должна только завершиться или быть уничтожена, чтобы более новый экземпляр процесса разблокировался и продолжил работу. Так что пока этот обходной путь делает то, что мне нужно. Я могу вызвать мою Ruby-программу с помощью
timeout 1m ./myrubyscript.rb
из сценария обтекания bash , если я, например, стану нетерпеливым. (В этом примере myrubyscript.rb прекратит работу через 1 минуту, независимо от того, получит ли он блокировку файла и продолжит ли делать то, что было написано.)