标签: lock

如何克服“设备或资源繁忙”?

我试图找到rm -rf一个文件夹,并得到“设备或资源繁忙”。

在 Windows 中,我会使用 LockHunter 来解决这个问题。什么是 linux 等价物?(请给出一个简单的“解锁此”方法作为答案,而不是像这样的完整文章。虽然它们很有用,但我目前只对 ASimpleMethodThatWorks™ 感兴趣)

lock files

326
推荐指数
9
解决办法
98万
查看次数

pid 和 lock 文件有什么用?

我经常看到程序指定pid和lock文件。而且我不太确定他们做什么。

比如编译nginx的时候:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
Run Code Online (Sandbox Code Playgroud)

有人可以对此有所了解吗?

lock pidfile

93
推荐指数
3
解决办法
10万
查看次数

如何列出进程锁定文件?

使用flock,多个进程可以同时拥有一个共享锁,或者等待获取一个写锁。我如何获得这些进程的列表?

也就是说,对于给定的文件 X,理想情况下找到每个进程的进程 ID,该进程持有或正在等待文件锁定。尽管只是计算等待锁定的进程数,但这将是一个非常好的开始。

process lock files

72
推荐指数
3
解决办法
21万
查看次数

正确锁定 shell 脚本?

有时您必须确保同一时间只有一个 shell 脚本实例正在运行。

例如,通过 crond 执行的 cron 作业本身不提供锁定(例如默认的 Solaris crond)。

实现锁定的常见模式是这样的代码:

#!/bin/sh
LOCK=/var/tmp/mylock
if [ -f $LOCK ]; then            # 'test' -> race begin
  echo Job is already running\!
  exit 6
fi
touch $LOCK                      # 'set'  -> race end
# do some work
rm $LOCK
Run Code Online (Sandbox Code Playgroud)

当然,这样的代码有竞争条件。有一个时间窗口,其中两个实例的执行都可以在第 3 行之后才能访问$LOCK文件。

对于 cron 作业,这通常不是问题,因为两次调用之间有几分钟的间隔。

但是事情可能会出错——例如,当锁定文件在 NFS 服务器上时——挂起。在这种情况下,多个 cron 作业可以在第 3 行阻塞并排队。如果NFS服务器再次处于活动状态,那么你已经惊群并行运行的作业。

在网上搜索我发现工具lockrun似乎是该问题的一个很好的解决方案。使用它,您可以运行一个需要像这样锁定的脚本:

$ lockrun --lockfile=/var/tmp/mylock myscript.sh
Run Code Online (Sandbox Code Playgroud)

您可以将其放在包装器中或从您的 crontab 中使用它。

lockf()如果可用,它使用(POSIX) 并回退到flock()(BSD)。并且lockf()对 NFS …

cron nfs shell-script coreutils lock

71
推荐指数
6
解决办法
6万
查看次数

Linux 中的自旋锁是什么?

我想详细了解 Linux 自旋锁;有人可以向我解释一下吗?

linux spinlock lock

38
推荐指数
4
解决办法
6万
查看次数

38
推荐指数
6
解决办法
4万
查看次数

Gedit 不会在 VirtualBox 共享上保存文件:文本文件繁忙

我有一个可以使用其他应用程序更改的文本文件(例如openoffice)。但是,当我尝试使用 更改并保存它gedit时,出现以下错误gedit

Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy
Run Code Online (Sandbox Code Playgroud)

BuildNotes.txt 的权限如下:

-rwxrwx--- 1 root vboxsf  839 2012-10-26 12:08 BuildNotes.txt
Run Code Online (Sandbox Code Playgroud)

用户 ID 是:

m@m-Linux:/media/sf_Ubuntu$ id
uid=1000(m) gid=1000(m) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare),1000(m),1001(vboxsf)
Run Code Online (Sandbox Code Playgroud)

有什么问题,我该如何解决?

linux gedit virtualbox lock files

35
推荐指数
4
解决办法
4万
查看次数

将输出重定向到文件是否会锁定文件?

如果我有命令

$ ./script >> file.log
Run Code Online (Sandbox Code Playgroud)

被调用两次,第二次调用发生在第一个结束之前,会发生什么?

第一次调用是否获得了输出文件的排他锁?如果是这样,第二个脚本是否在尝试写入时失败,或者 shell 是否接受输出(允许脚本结束)并抛出错误?

或者日志文件被写入两次?

shell bash io-redirection lock

30
推荐指数
2
解决办法
1万
查看次数

这个脚本如何确保只有一个它自己的实例在运行?

2013 年 8 月 19 日,Randal L. Schwartz发布了这个shell 脚本,旨在确保在 Linux 上“只有一个 [该] 脚本实例正在运行,没有竞争条件或必须清理锁定文件”:

#!/bin/sh
# randal_l_schwartz_001.sh
(
    if ! flock -n -x 0
    then
        echo "$$ cannot get flock"
        exit 0
    fi
    echo "$$ start"
    sleep 10 # for testing.  put the real task here
    echo "$$ end"
) < $0
Run Code Online (Sandbox Code Playgroud)

它似乎像宣传的那样工作:

$ ./randal_l_schwartz_001.sh & ./randal_l_schwartz_001.sh
[1] 11863
11863 start
11864 cannot get flock
$ 11863 end

[1]+  Done                    ./randal_l_schwartz_001.sh
$
Run Code Online (Sandbox Code Playgroud)

以下是我的理解:

  • 该脚本将<其自身内容的副本(即 from …

linux io-redirection shell-script lock subshell

23
推荐指数
2
解决办法
3189
查看次数

为什么 flock 不清理锁文件?

进程完成后,我看到锁文件没有被删除?有什么理由flock保留文件吗?另外如何flock知道是否获得了锁?

这是来自crontab文件的示例

* * * * * flock python <script_name>.py
Run Code Online (Sandbox Code Playgroud)

lock flock

16
推荐指数
1
解决办法
9447
查看次数