`
dongmj
  • 浏览: 31790 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

shell实现单例模式

阅读更多

使用场景:几个shell脚本共享一个本地derby库,需要保证同一时间只有单一shell脚本占有数据库。

 

方法一:查看进程是否存在

 

#!/bin/bash  
ScriptName=`basename $0`  
#basename,返回一个字符串参数的基本文件名称  
#pidof -x,找出shell脚本script的进程PID,全部列出进程PID  
if [ `pidof -x $ScriptName | wc -w` -gt 2 ]; then  
  echo "Instance is running!"  
  exit 0  
else  
  sleep 10      #执行程序   
fi  

 

 验证当前线程中是否存在basename相同的进程

 

优点:shell退出后,可以快速检测到;没有文件的生成。

缺点:只适应单一shell脚本,如果多个脚本之间互斥,则不启作用。

 

方法二:flock锁文件

flock 是对于整个文件的建议性锁。也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的。(建议性锁不强求进程遵守。)最棒的一点是,它的第一个参数是文件描述符,在此文件描述符关闭时,锁会自动释放。而当进程终止时,所有的文件描述符均会被关闭。于是,很多时候就不用考虑解锁的事情啦。

lockit () {
  exec 7<>.lock
#尝试锁文件
  flock -n 7 || {
#获得锁失败
    echo "Waiting for lock to release..."
#永久等待获得锁
    flock 7
  }
#获得锁成功
}

 优点:解决了多个shell脚本共享资源

 缺点:当获得锁的线程退出(包含kill)需要等待一段时间后,才能flock成功。

分享到:
评论

相关推荐

    visual c++ windows shell programming.rarvisual c++ windows shell programming

    了解如何有效地组织代码、使用设计模式如单例、工厂方法等,可以使Shell扩展更加健壮。 通过《Visual C++ Windows Shell Programming》这本书,读者可以系统地学习到以上这些知识点,并逐步掌握使用Visual C++进行...

    Java面试宝典(设计模式,算法,Linux篇).docx

    单例模式有两种常见实现:懒汉式和饿汉式。懒汉式是在第一次需要时才创建实例,而饿汉式是在类加载时就创建实例,以确保线程安全。 简单工厂模式是一种创建型设计模式,它提供了一个工厂类来负责创建一系列相关或...

    基于Java的实例源码-开发的SHELL CRaSH.zip

    5. **软件设计模式**:SHELL CRaSH的实现可能涉及到常见的设计模式,如工厂模式(用于创建shell实例)、单例模式(确保只有一个shell实例)等,这些模式对于理解和复用代码至关重要。 6. **安全性**:由于SHELL ...

    Delphi 深度探索(第二版)〖含随书光盘源代码〗

    6.1.2 单例模式(singleton) 6.1.3 建造模式(builder) 6.1.4 原型模式(prototype) 6.2 结构模式 6.2.1 适配器模式(adapter) 6.2.2 合成模式(composite模式) 6.2.3 装饰模式(decorator模式) ...

    比较好的c_sharp_shell的开发教程,里面附demo.rar

    10. 设计模式:了解和应用设计模式,如工厂模式、单例模式和策略模式,可以使你的Shell代码结构更清晰,更易于维护和扩展。 11. 测试:确保你的Shell稳定可靠,需要进行单元测试和集成测试。C#有诸如NUnit和xUnit...

    LNMP拾贝集

    此外,书中还涉及了如何用PHP实现单例模式、如何防止文件名长度超出限制、如何判断访问来源是否为手机设备等高级应用。 整体而言,《LNMP拾贝集》是一本针对PHP、JavaScript、Shell编程的综合性练习手册,覆盖了Web...

    JAVA全集,快速入门。PPT教程,各种实例,命令全集,编码规范,设计模式,技能优化集锦……

    9. **JAVA设计模式**:设计模式是软件工程中的最佳实践,如单例模式、工厂模式、观察者模式等,它们提供了解决常见问题的模板,提高了代码的可读性和可维护性。 10. **Oracle optimizer**:这部分可能涉及到数据库...

    集合go的编程技巧 分布式 数据库MySQL Linux操作系统讲解 设计模式 主流的框架设计,结构设计.zip

    例如,工厂模式用于创建对象,单例模式确保类只有一个实例,观察者模式用于实现发布/订阅机制。在Go中,虽然静态类型语言使得实现某些模式稍有不同,但理解设计模式的原理和应用场景依然非常有价值。 此外,了解和...

    DevNet Associate DEVASC 200-901.pdf

    * 通用设计模式:介绍常见的设计模式,例如单例模式、工厂模式和观察者模式。 * Linux BASH:介绍Linux BASH shell的基本命令和应用。 * 软件版本控制:介绍版本控制的概念和 Git 的使用。 Python 编程 * Python ...

    2018 Java 工程师面试总结

    18. **并发编程**:Java的并发包,线程池的实现原理,以及单例模式的实现都是热门话题。 19. **网络协议**:TCP/IP协议的区别以及如何设计通信方案。 20. **反射与注解**:了解Java反射机制和注解的应用。 21. **...

    虚谷号python库清单1

    3. attrs: 类封装器,提供了对类的封装和操作,常用于实现单例模式、工厂模式等。 4. autobahn: 网络客户端和服务器,提供了WebSocket、WAMP等网络通信协议的实现,常用于实时通信和数据交换。 5. Automat: 有限...

    C# 做的资源管理器

    7. **设计模式**:良好的软件设计往往采用设计模式,如单例模式用于管理Shell对象,工厂模式用于创建控件实例,观察者模式用于事件通知。 8. **UI布局和样式**:为了使应用程序看起来更专业,需要考虑界面的布局和...

    Extra:linux,python,设计模式

    在Python中,可以使用`__new__`方法实现单例。 3. 装饰器模式:在不修改类代码的情况下,增加类的功能。Python的装饰器是实现这一模式的优雅方式。 4. 观察者模式:定义了对象之间的一对多依赖关系,当一个对象的...

    Cesium中文网的朋友们-11

    - 这是一种软件开发方法,基于类和对象,强调封装、继承和多态性,常见的设计模式有工厂模式、单例模式、观察者模式等。 4. **数字地球原理**: - 数字地球是一种集成地理信息、遥感数据、GIS技术的虚拟现实系统...

    基于Java的评教管理系统设计源码

    9. **设计模式**:在Java开发中,常见的设计模式如工厂模式、单例模式、观察者模式等可能会被用于提高代码的可读性、可维护性和扩展性。 10. **Web框架**:虽然没有明确提及,但考虑到Java Web应用的开发,很可能...

    Java 执行本地脚本携带多参数

    在Java中,我们可以应用各种设计模式,如工厂模式、单例模式、观察者模式、装饰器模式等。例如,如果我们需要动态地创建不同类型的脚本执行对象,可以使用工厂模式;而如果要确保脚本只被实例化一次,可以采用单例...

    java软件工程师课程详细版.docx

    * 单例模式 * 工厂模式中的工厂方法 * 工厂模式中的抽象工厂 * 工厂模式的主要缺点 反射机制 * Java 反射机制 * 类加载器 * Java Reflection API (Class, Constructor, Field, Method) * 利用 Java 反射技术实现可...

    java面试

    - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - **装饰者模式**:动态地给一个对象添加一些额外的...

    applet队列

    6. 设计模式:是软件工程中解决常见问题的经验总结,例如单例模式、工厂模式、观察者模式等,它们为良好的代码结构和可维护性提供了指导。 7. Java String源码:Java的String类是不可变的,深入研究其源码能帮助...

    design_patterns.zip

    1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供一个全局访问点。在Linux环境下,这可能用于管理共享资源,如日志服务或线程池。 2. **工厂方法模式(Factory Method)**:定义一个用于创建对象的...

Global site tag (gtag.js) - Google Analytics