问题标签 [flock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flock - 系统重启后群锁会重置吗?
假设系统由于停电而意外断电。
系统启动时,flock 是否总是被认为是“解锁”的?
在 Linux 上,flock 依赖于 fcntl(...) (文件描述符)。
flock -u <lock_filename>
换个方式问:系统第一次启动时,是不是不需要手动调用?(即来自 cron @reboot)?
更新:
BSD 羊群手册页说:
php - 是什么导致我的 json 文件损坏?
我有一个脚本可以计算单词的频率并将结果保存到 json 文件中。再次运行时,它会读取现有的 json 文件,组合结果,然后重新写入 json 文件。这可以在一个请求中重复发生,并且可以有许多同时请求,所以我曾经flock()
尝试防止错误。我昨天让它运行了一段时间并获得了良好的数据,但今天早上我检查了文件已损坏。(仍然是一个很好的文本文件,但 json 被破坏了。)
以下是我的代码的相关部分:
由于它工作了一段时间但最终写入了错误的 json,我不知道这是否是文件锁定问题,或者我是否遇到了 json_encode 返回错误数据的问题......?
php - LOCK_SH 是如何工作的?
我正在研究 PHP 中的羊群机制,我很难理解 LOCK_SH 模式的功能。我在一个网站上读到它锁定了文件,因此其他脚本无法在其中写入,但他们可以从中读取。但是,以下代码似乎没有按预期工作:在 file1.php 我有:
在 file2.php 我有
我运行第一个将文件锁定 20 秒的脚本。锁定到位后,我运行 file2.php,它立即完成执行,之后,当我打开“my_file.txt”时,字符串“test”被附加到它上面(尽管“file1.php”仍在运行)。我尝试更改“file2.php”,以便它可以从锁定的文件中读取,并且不会出现任何问题。所以显然......'LOCK_SH'接缝根本什么都不做。但是,如果我使用 LOCK_EX 是的,它会锁定文件,没有脚本可以写入或读取文件。我正在使用 Easy PHP 并在 Windows 7 下运行它。
php - 测试文件是否被锁定
在 PHP 中,如何测试文件是否已被锁定flock
?例如,如果另一个正在运行的脚本调用了以下内容:
linux - Linux flock(fd, LOCK_EX|LOCK_NB) 会虚假失败吗?
考虑这样一种情况,两个进程同时尝试使用flock(fd, LOCK_EX|LOCK_NB)
.
如前所述,尝试是非阻塞的,因此两个进程之一应该以EWOULDBLOCK
.
这是我的问题:(Linux)实现是否flock()
保证两个进程中的一个在每种情况下都会成功?EWOULDBLOCK
或者,即使没有其他人干预,是否有可能两者最终都失败了?
简而言之,可以flock(fd, LOCK_EX|LOCK_NB)
用EWOULDBLOCK
?
我主要对flock()
Linux 提供的版本感兴趣,但flock()
非常欢迎有关其他系统(例如 OS X)的信息。
另外,我假设无论锁是独占的(LOCK_EX
)还是共享的(LOCK_SH
),答案都是一样的。如果没有,请告诉我。
bash - 200>"$somefile" 完成了什么?
我发现样板flock(1)
代码看起来很有希望。现在我想在盲目使用之前了解组件。
似乎这些功能正在使用第三种形式flock
群 [-sxun] [-w 超时] fd
第三种形式在 shell 脚本中很方便,通常使用如下方式:
我丢失的部分(来自示例包装函数)是这个符号
或从flock
手册页简写
这有什么作用?
我注意到后续命令flock
传递的值不同于初始重定向中的值导致flock
抱怨
似乎flock
正在使用文件描述符作为映射来知道要对哪个文件进行操作。但是,为了使其正常工作,这些描述符必须仍然存在并与文件相关联,对吗?
重定向完成并创建锁定文件后,文件是否已关闭,与打开文件关联的文件描述符是否已蒸发?我认为文件描述符只与打开的文件相关联。
这里发生了什么?
ruby - Ruby 的 File::LOCK_UN 似乎没有工作
这非常简单,但似乎不起作用。我正在使用 Ruby 的File#flock方法。首先,我锁定一个文件,然后释放锁定,然后尝试再次锁定它。第二次锁定失败,就好像文件仍然被锁定一样。这是来自 irb 会话的直接复制粘贴。我正在使用在 Ubuntu 13.04 上运行的 Ruby 2.1.0p0。
如果文件仍处于锁定状态,第二次 LOCK_EX 尝试就会挂起。从上面的复制粘贴中可以看出,我不得不用 Ctrl-C 中止第二次尝试。
知道为什么解锁在这里不起作用吗?
作为参考,我需要这个的原因是因为我试图获得一个 Mutex 的等价物,但它是跨进程而不是线程的。根据我在网上阅读的内容,文件锁应该足够了。
perl - Perl中的flock:错误的文件描述符
我使用 Perl v5.10.1,并有下一部分代码:
当我尝试运行它时:
pid "/var/run/1392394505.pid" 已经锁定:错误的文件描述符
它出什么问题了?有任何想法吗?
python - Python 检查另一个 Python 应用程序是否正在运行
我有两个应用程序(从 python 编译,仅在 Windows 上运行)。第一个是计划好的:它启动,启动另一个应用程序的几个实例,然后死掉。此外,此计划应用程序应检查以前启动的子应用程序实例是否仍在运行。
为了实现这个检查,我尝试使用文件锁定方法:
- 在子应用程序中创建文件并对其进行显式锁定。如果应用程序崩溃,锁应自动释放。
- 从计划的应用程序检查此文件。如果它被锁定 - 这意味着子应用程序仍在运行。
这在 PERL 中很容易实现,但我在 python 中遇到了一些麻烦。
我尝试使用 win32 API(从portalocker中删除所需的部分代码)。
这是测试脚本:
我打开两个 Python shell 实例并导入此脚本。然后我在其中一个中启动 go() 方法,当它处于睡眠状态时,我启动 checkFileLock() 函数来检查文件是否真的被锁定......它不是。
我还尝试离开 sys.stdin.readline 就像在 portalocker 中完成的那样,在这种情况下,文件确实被锁定了。但是没有必要在我的应用程序中收听标准输入......
所以我在创建锁的线程中创建了无限循环。在这种情况下,文件也被锁定,但即使在我关闭 Python shell 后它也不会被释放,这也是不正确的。
我将很高兴听到如何解决在 Windows 中从 Python 锁定文件的问题。如果您有任何其他工作方法可以确定该进程是否仍在运行,我也想听听。
linux - 为什么flock使用描述符或文件
看完之后flock
有点迷茫。基本上有两种形式:
现在,如果我想使用第二种形式,我需要使用exec 200<> file
. 然后我用flock 200
.
现在我阻止了我的脚本被破坏file
,因为它需要在这样做之前获取锁。仍然为什么我必须先创建描述符?我可以在file
不使用该描述符的情况下完美运行。
那么为什么我不得不创建一个描述符呢?