Eu descobri que apt está usando um fcntl. Como estou usando Ruby para a linguagem de script, tive que criar minha própria função para procurar por bloqueio. A razão para isso é que o Ruby não implementa totalmente a função fcntl. Apenas fornece a chamada de função e constantes. A capacidade de construir estruturas de floco e como passá-las é omitida ou não é documentada.
Aqui está a lista que encontrei falando sobre isso .
Aqui está a função que acabei escrevendo:
def flocked? &block
flockstruct = [Fcntl::F_RDLCK, 0, 0, 0, 0].pack("ssqqi")
fcntl Fcntl::F_GETLK, flockstruct
status = flockstruct.unpack("ssqqi")[0]
case status
when Fcntl::F_UNLCK
return false
when Fcntl::F_WRLCK|Fcntl::F_RDLCK
return true
else
raise SystemCallError, status
end
end