可锁定的:使用锁定文件提供对资源的独占访问。

[bsd3型,图书馆,系统][建议标签]

使用锁定文件提供对资源的独占访问,锁定文件是目的是通过它们的存在来表示某些资源被锁定。

代码示例可以在中找到系统。IO.LockFile(IO.Lock文件)模块。


[跳到自述]

旗帜

手动标记

姓名描述违约
学究式的

向GHC传递其他警告标志。

残疾人

使用-f<标志>启用标志,或-f-<标志>禁用该标志。更多信息

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

版本[RSS(RSS)] 0.5.0.0,0.5.0.1,0.5.0.2,0.7.0.0
更改日志 更改日志.md
依赖关系 基础(>=4.9 && <5),数据默认类(>=0.0 && <0.2),目录(>=1.1 && <1.4),例外(>0.6 && <0.11),变压器(>=0.3 && <0.6)[细节]
许可证 BSD-3条款
版权 (c) 2013-2016年,2018年Peter Trško
作者 彼得·特尔斯科
维护人员 peter.trsko@gmail.com
类别 系统
主页 https://github.com/trskop/lock-file#自述文件
Bug跟踪器 https://github.com/trskop/lock-file/问题
源回购 头部:git克隆git://github.com/trskop/lock-file.git
这个:git克隆git://github.com/trskop/lock-file.git(标记0.7.0.0)
已上传 通过彼得·特尔斯科2018年4月15日T15:55:35Z
分配 尼克斯(NixOS):0.7.0.0
反向依赖关系 1直接,0间接[细节]
下载 总计3984人(过去30天内有26人)
额定值 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2018-04-15[所有1个报告]

锁定文件自述-0.7.0.0

[返回包描述]

锁定文件

Haskell程序设计语言 BSD3许可证

黑客攻击 生成

描述

使用锁文件提供对资源的独占访问,锁文件是目的是通过它们的存在来表示某些资源被锁定。

用法示例

以下示例获取锁文件,然后等待1000000微秒在释放之前。还要注意,可以指定重试策略。在这里,我们将其设置为因此,此代码不会重试获取锁文件第一次失败后。

{-#LANGUAGE类型应用程序#-}-- |--模块:主--描述:获取短期锁的简单示例。--版权所有:(c)20132014 Peter Trsko--许可证:BSD3----维护人员:peter.trsko@gmail.com--稳定性:实验性--便携性:便携模块Main(主)哪里进口管制。并发(线程延迟)--来自基本包,但特定于GHC。导入合格的控件。异常作为异常(句柄)导入数据。默认值。类(默认(def))--从data-default-class包中,也可以使用--data-default包版本0.5.2及以上。-- http://hackage.haskell.org/package/data-default-class-- http://hackage.haskell.org/package/data-default导入系统。IO.LockFile(IO.Lock文件)(锁定异常,锁定参数(retryToAcquireLock),重试策略(否),带锁定文件)主::IO()main=句柄异常.withLockFile lockParams lockFile$threadDelay 1000000哪里lockParams=定义{retryToAcquireLock=否}lockFile=“/var/run/lock/my-example-lock”handleException=异常处理$输入StrLn。(“锁定失败:”++)。显示@LockingException

此命令行示例显示,尝试执行例子同时也会导致第二个失败。

堆栈ghc示例/example.hs[1 of 1]编译主目录(example/example.hs,example/ixample.o)链接示例/示例。。。$ ./示例/示例&/示例/示例[1] 7893锁定失败:无法获取锁定文件:“/var/run/lock/my-example-lock”$1]+完成/示例/示例

PID文件示例

此库实现的锁定文件创建时包含在类UNIX系统上创建该.PID文件的进程是锁定文件。它可以防止同一个守护进程多次启动。

由于上述事实,我们现在可以使用以下类型创建函数签名:

使用PidFile::IO()->IO()

其目的是包装应用程序主要的并在传递之前获取PID文件控制应用程序代码,如果已获取PID文件,则失败。

{-#LANGUAGE Lambda案例#-}{-#LANGUAGE NoImplicitPrelude#-}主模块哪里进口管制。适用(纯)进口管制。并发(线程延迟)进口管制。异常(catch)进口管制。莫纳德((>=>),(>>=))导入数据。函数((.),($),常量)导入数据。函数((<$>))导入数据。单体((<>))导入系统。环境(getEnv,getProgName)导入系统。退出(exitFailure)导入系统。IO(IO,文件路径,hPutStrLn,putStrLn,stderr)导入文本。显示(Show,showString)导入系统。Posix公司。用户(getEffectiveUserID)导入数据。违约。类别(def)导入系统。IO.LockFile(IO.Lock文件)(锁定异常(CaughtIOException,UnableToAcquireLockFile),锁定参数(retryToAcquireLock),重试策略(否),使用LockFile)使用PidFile::IO()->IO()带PidFile m=dopidFilePath<-mkPidFilePathwithLockFile def{retryToAcquireLock=No}pidFilePath m`catch`(printLockingException pidFilePath>=>const exitFailure)哪里mkPidFilePath::IO文件路径mkPidFilePath=do文件名<-(<>“.pid”)<$>getProgNamegetEffectiveUserID>>=\case0->纯$“/var/run/”<>文件名_->(<>('/':'.':fileName))<$>获取环境“主页”--如果$HOME环境变量为--未设置。printLockingException::文件路径->锁定异常->IO()printLockingException filePath=hPutStrLn标准错误。mk消息。\箱子UnableToAcquireLockFile _->“文件已存在。”CaughtIOException e->显示e哪里mk消息=showString文件路径。showString“:无法创建PID文件:”主::IO()main=withPidFile$doputStrLn“你好,世界!”线程延迟1000000

建筑选项

  • -fpedantic公司(默认情况下禁用)

    向GHC传递其他警告标志。