问候所有.我正在设置一个cron作业来执行一个bash脚本,我担心下一个可能会在前一个脚本结束之前启动.一个小小的谷歌搜索显示,一种流行的解决方法是flock命令,使用方式如下:
flock -n lockfile myscript.sh
if [ $? -eq 1 ]; then
echo "Previous script is still running! Can't execute!"
fi
Run Code Online (Sandbox Code Playgroud)
这非常有效.但是,如果我想检查退出代码,我该怎么办myscript.sh?无论退出代码返回将被覆盖flock的,所以我不知道,如果它成功,或不执行的方式.
我正在调试一个定期引发的测试IOException,注意到一个文件因为被另一个进程使用而无法删除.我怀疑这个过程确实是我的测试工具,并且进程中的其他一些线程在我预期时没有处理它的文件资源.
有没有一个工具可以用来确定哪个线程阻挡了阻碍锁?如果我可以识别线程,那么我可以检查它的调用堆栈,并至少尝试确定资源尚未处理的原因.该SOS调试工具看起来很有希望,但我不认为这会从我的调查中删除的猜测相当数量的任何特征.
一种想法是识别本机OS线程ID,然后可以通过SOS将其映射到托管线程ID.我将如何完成前者?
我有一个Powershell代码,它充当给定文件夹路径上的文件侦听器。侦听器启动对另一个程序的命令行调用,该程序打开并播放文件。
问题在于,如果将任何文件放入此文件夹,PowerShell代码都会立即启动命令行调用。如果文件很大(例如100 + mb),这将是一个问题,因为当有人将文件复制到文件夹中时,当命令功能启动并尝试打开文件时,文件可能只完成了5%的“写入”操作(并且失败)。
Powershell中是否有办法检查文件是否仍在写入?这样,我可以建立一个循环,每隔x秒检查一次,并且仅在写入完成后才运行?
如果文件也被写入,它会保持“锁定”吗?可以在Powershell中检查吗?
感谢大家!
假设我有一个文件urls.txt,其中包含我正在监控的URL列表.我的监控脚本偶尔会编辑该文件,例如,指示每个URL是否可访问.我还想手动编辑该文件,添加或更改URL列表.我怎样才能允许这样我手动编辑时不必考虑它?
以下是一些可能的答案.你会怎么做?
参与hackery就像让程序检查vim或emacs创建的锁定文件一样.由于这只适合我,这实际上是有效的.
如果人类编辑始终优先,那么只需要总是让人类破坏程序的更改(例如,忽略编辑器警告文件已在磁盘上更改).然后程序可以在下一个循环中重做它的更改.尽管如此,在用户编辑文件时更改文件并不是那么好.
永远不要让人触摸程序正在进行修改的文件.重新思考设计,只有一个文件只有人类编辑,另一个文件只有程序编辑.
为人类提供一个自定义工具来编辑执行相应文件锁定的文件.这可能与锁定文件然后启动编辑器或自定义接口(可能是简单的命令行界面)以插入/更改/删除文件中的条目一样粗糙.
使用数据库而不是平面文件,然后锁定全部自动处理.
(请注意,我编写了URL监控示例,以使其更具体,因为我实际想到的可能是太奇怪和分散注意力 - 这个问题严格来说是关于如何让人类和程序都修改相同的状态文件.)
我使用 SQLite(实际上是 PySQLite)创建了一个简单的数据库。当我从本地机器(即 Windows 机器驱动器上的程序和数据库文件)查询或写入数据库时,它工作正常。但是,当我将数据库文件复制到我的网络驱动器(时间胶囊)时,Windows 机器虽然可以看到这些文件并且对驱动器具有完全的读/写访问权限,但它甚至会给我一个“SQL 错误:数据库被锁定”执行简单选择时!
Mac 上的网络查询工作正常。
没有花哨的多访问——只有一台机器打开了数据库。似乎是一些奇怪的 Mac 网络问题。发生在 Python 程序或 SQLite3 命令行中。我正在使用 SQLite 3.6.14.2。
有人见过这个问题吗?有什么办法修复吗?真的不想过多地使用 MYSQL,因为这是一个简单的单用户程序,但我想在多台机器上使用它。
谢谢。
我有一个应用程序,它同时运行多个进程来读取和写入文件.
private Process PrepareProcess(string workingDirName, string scriptPath, string[] args) {
var process = new Process {
StartInfo = {
WorkingDirectory = workingDirName,
FileName = scriptPath,
Arguments = string.Format(string.Join(" ", args))
}
};
return process;
}
Run Code Online (Sandbox Code Playgroud)
我需要确保文件只能由一个进程同时修改.怎么做?
该进程将运行外部脚本,该脚本将修改文件.我无法管理如何打开文件.我需要管理运行过程.
谢谢!
有没有办法,通过.Net或通过删除.Net中的Win32 API来访问Windows全局文件锁表?
我正在寻找一个更好的解决方案来确定一组文件是否被锁定,而不是检查每个单独的文件以查看是否已对其进行锁定.
使用java.nio.channels.FileLock在进程间锁定文件有多安全?据说如果我们有一个独占锁,其他进程就无法访问该文件.但是,关于另一个SO问题的下面答案表明其他进程也必须检查文件锁,以便我们的进程安全.
(a)您是否知道锁定文件不会阻止其他进程接触它,除非它们也使用锁?
所以我测试了我的代码并尝试使用Windows文本编辑器更改了一个我已经锁定的文件,并且我不会受到伤害,但是当我使用Notepad ++进行测试时却没有.
是否有在Java 6中正确锁定文件的解决方案?
如何使用C++以编程方式锁定/解锁或以其他方式阻止/启用编辑Linux上的源文件.
我希望能够锁定源文件,这样如果我在编辑器中打开它,它将不允许我保存回相同的源文件.
我想可能将权限更改为只读(并在以后将其更改为读写):我如何从C++中执行此操作?
我正在 VS2010 上使用 C# 开发文件锁定器/解锁器应用程序。我想要的是使用我的应用程序使用密码锁定文件,然后随时解锁。
事实上,我使用以下代码来锁定文件,但仅当应用程序仍在运行时才会锁定文件;当我关闭应用程序时,文件被解锁。
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Configuration;
using System.Windows.Forms;
namespace LockFile
{
public enum LockStatus
{
Unlocked,
Locked
}
public class LockFilePresenter
{
private ILockFileView view;
private string file2Lock = string.Empty;
private FileStream fileLockStream = null;
public LockFilePresenter(ILockFileView view)
{
this.view = view;
}
internal void LockFile()
{
if (string.IsNullOrEmpty(file2Lock) || !File.Exists(file2Lock))
{
view.ShowMessage("Please select a path to lock.");
return;
}
if (fileLockStream != null)
{
view.ShowMessage("The path is already locked."); …Run Code Online (Sandbox Code Playgroud) file-locking ×10
.net ×3
c# ×2
filelock ×2
bash ×1
c++ ×1
cron ×1
encryption ×1
exit-code ×1
filestream ×1
flock ×1
io ×1
ioexception ×1
java ×1
linux ×1
locking ×1
monitoring ×1
nio ×1
powershell ×1
process ×1
sos ×1
sqlite ×1
unix ×1
utilities ×1