- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我无法弄清楚为什么 flock() 在以下情况下无法正常运行。
以下代码被放入两个不同的 PHP 脚本中,一个是“test1.php”,另一个是“test2.php”。代码的要点是创建一个其他进程(正确使用 flock() 代码)应该能够写入的文件。将有许多不同的 PHP 脚本试图获得对该文件的独占锁,但在任何给定时间只有一个应该具有访问权限,其余所有脚本在无法获得锁时应该优雅地失败。
我测试这个的方式非常简单。 “test1.php”和“test2.php”都放在我服务器上的一个可通过网络访问的目录中。然后从 Firefox 等浏览器中执行第一个脚本,然后立即从不同的浏览器选项卡执行第二个脚本。当代码从两个不同的 PHP 脚本(例如“test1.php”和“test2.php”)运行时,这接缝工作,但是当代码从相同的“test1.php”脚本或“test2.php”运行两次时script 运行的第二个脚本不会立即返回失败。
我能想到的唯一原因是 flock() 将所有具有相同文件名的 PHP 进程视为同一进程。如果是这种情况,那么当“test1.php”或“test2.php”运行两次(从两个不同的浏览器选项卡)时,PHP 将它们视为同一进程,因此不会使锁定失败。但是对我来说,这样设计 PHP 是没有意义的,因此我想看看是否有其他人可以为我解决这个问题。
提前致谢!
<?
$file = 'command.bat';
echo "Starting script...";
flush();
$handle = fopen($file, 'w+');
echo "Lets try locking...";
flush();
if(is_resource($handle)){
echo "good resource...";
flush();
if(flock($handle, LOCK_EX | LOCK_NB) === TRUE){
echo "Got lock!";
flush();
sleep(100);
flock($fp, LOCK_UN);
}else{
echo "Failed to get lock!";
flush();
}
}else{
echo "bad resource...";
flush();
}
exit;
非常感谢以上任何帮助!
谢谢,丹尼尔
最佳答案
我遇到了同样的情况,发现问题出在浏览器上。
当对同一个 URL 发出多个请求时,即使跨选项卡或窗口这样做,浏览器也足够“聪明”地等到第一个请求完成,然后浏览器尝试运行后续请求。
因此,虽然看起来锁不起作用,但实际发生的是浏览器(Chrome 和 Firefox)在运行第二个请求之前等待第一个请求完成。
您可以通过在 Chrome 和 Firefox 中分别打开相同的 URL 来验证是否属于这种情况。通过这样做,就像我所做的那样,您可能会看到锁确实按预期工作。
关于PHP flock() 没有锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24440731/
我改进了我的信号处理功能,但现在当我尝试通过 gcc ./test2.c -Wall -Wextra 编译我的程序时,我收到以下信息; ./test2.c: In function 'end_app'
对不起,我不能完全集中我的问题。 我正在尝试使用 flock 来避免同时运行脚本,如已接受的答案中所述: How to prevent a script from running simultaneo
此代码是在 pythonanywhere (linux) 上托管的 python 3.5。 我正在使用 with open 来管理一个非阻塞的 flock,但有时调度的进程会遇到异常,导致作业终止;没
我写了一个简单的代码来测试 flock(): int main (int argc, char * const argv[]) { int fd1; if (fd1 = open( "
以下代码在调用 file_get_contents 时触发文件不存在的错误,尽管这种情况很少发生,即使 file_exists 仅在上面的几个语句中被调用。 我认为在调用 file_exists 期间
If a process uses open(2) (or similar) to obtain more than one descriptor for the same file, these d
在我的 bash 脚本开始时,我运行 flock 以确保脚本不会同时运行两次。脚本的一部分是显示 xclock,但作为后台命令。所以我看到时钟并且脚本完成(时钟仍然明显显示)。但是当我想重新启动脚本时
我想同步对文件的访问。我正在使用 Linux 和 g++。 我想使用函数 flock() 锁定文件。我开发了 2 个测试应用程序写入和读取同一个文件。他们都使用 LOCK_SH 调用 flock()。
在这种情况下我需要帮助, 在处理请求时出于某种原因我需要写入文件,所以我使用 flock 来确保同一时间只有一个请求写入文件。 我的问题是当一个请求调用在被其他请求锁定期间蜂拥而至时会发生什么。是等到
折腾了PHP源码半个小时后,我放弃了。 :P 问题是 - PHP flock() 函数调用在 Gentoo Linux 系统上归结为什么系统调用?我遇到了一些问题(比如 block-for-30-se
我无法弄清楚为什么 flock() 在以下情况下无法正常运行。 以下代码被放入两个不同的 PHP 脚本中,一个是“test1.php”,另一个是“test2.php”。代码的要点是创建一个其他进程(正
我正在使用 flock() 函数通过获取临时文件的锁来检查脚本的另一个实例是否已经在运行,因此下一个实例应该检查文件是否未被锁定,否则它将停止
我正在测试从其他线程锁定文件描述符是否会影响主线程。 #include #include #include #include #include #include //#include #
在 Linux 的 bash 脚本中,我使用 flock [命令 flock,而不是系统调用 flock()] 来实现文件锁定,从而保护对共享资源 [这是 tmpfs 中的文件] 的并发访问。 我有陷
我的印象是flock(2)是线程安全的,我最近在代码中遇到了这样的情况,其中多个线程能够在同一个文件上获得锁,这些文件都与使用 c api flock 获取独占锁同步。进程25554是一个多线程应用程
想象以下 Perl 代码(此处为伪代码): successfully acquired flock for FILEHANDLER # line 1 some error or maybe
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章PHP flock 文件锁详细介绍由作者收集整理,如果你对这篇文章有兴趣
使用 O_EXLOCK 标志调用 open() 与仅调用 open() 然后调用 有什么区别羊群()?后者具有潜在的竞争条件,但除此之外,两种方式都获得了对文件的独占进程锁,对吗? 最佳答案 唯一的区
大家好。我正在设置一个 cron 作业来执行 bash 脚本,我担心下一个可能会在前一个结束之前开始。稍微谷歌一下就会发现解决这个问题的一种流行方法是 flock 命令,使用方式如下: flock -
当我尝试通过 cron 作业执行 flock 时出现错误。 我正在执行 * * * * * /usr/bin/flock -n /usr/local/monitor/asdp_cloudwatch/r
我是一名优秀的程序员,十分优秀!