文件写锁定和子进程

时间:2014-09-01 05:38:10

标签: linux locking fcntl

如果进程为文件提供写锁定然后生成子进程,那么子进程是否继承了锁?如果是,那么有2个进程有写锁,我了解到只有只有 1进程可以有写锁,有些道理吗?这是一个测试python代码

#!/usr/bin/python

import fcntl
import time
import os

fp = open('test.ini','w')
fcntl.flock(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
pid = os.fork()

if pid > 0:
    time.sleep(10)
    exit(0)
if pid == 0:
    time.sleep(100)
    exit(0)

当父级存在时,我试图获取文件test.ini的锁,但失败,所以我猜孩子有锁

1 个答案:

答案 0 :(得分:0)

文件锁与打开的文件描述符相关联。这意味着当您使用dup()(如系统调用)复制描述符时(或者当子进程将从其父进程继承文件描述符时),也会继承锁。 例如

flock(fd, LOCK_EX);//get a lock


newfd = dup(oldfd);//duplicating the file descriptors


flock(newfd, LOCK_UN);//THis call will release the lock using the duplicated file descriptor.

我希望这些信息有所帮助。