使用场景:几个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成功。
相关推荐
了解如何有效地组织代码、使用设计模式如单例、工厂方法等,可以使Shell扩展更加健壮。 通过《Visual C++ Windows Shell Programming》这本书,读者可以系统地学习到以上这些知识点,并逐步掌握使用Visual C++进行...
单例模式有两种常见实现:懒汉式和饿汉式。懒汉式是在第一次需要时才创建实例,而饿汉式是在类加载时就创建实例,以确保线程安全。 简单工厂模式是一种创建型设计模式,它提供了一个工厂类来负责创建一系列相关或...
5. **软件设计模式**:SHELL CRaSH的实现可能涉及到常见的设计模式,如工厂模式(用于创建shell实例)、单例模式(确保只有一个shell实例)等,这些模式对于理解和复用代码至关重要。 6. **安全性**:由于SHELL ...
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模式) ...
10. 设计模式:了解和应用设计模式,如工厂模式、单例模式和策略模式,可以使你的Shell代码结构更清晰,更易于维护和扩展。 11. 测试:确保你的Shell稳定可靠,需要进行单元测试和集成测试。C#有诸如NUnit和xUnit...
此外,书中还涉及了如何用PHP实现单例模式、如何防止文件名长度超出限制、如何判断访问来源是否为手机设备等高级应用。 整体而言,《LNMP拾贝集》是一本针对PHP、JavaScript、Shell编程的综合性练习手册,覆盖了Web...
9. **JAVA设计模式**:设计模式是软件工程中的最佳实践,如单例模式、工厂模式、观察者模式等,它们提供了解决常见问题的模板,提高了代码的可读性和可维护性。 10. **Oracle optimizer**:这部分可能涉及到数据库...
例如,工厂模式用于创建对象,单例模式确保类只有一个实例,观察者模式用于实现发布/订阅机制。在Go中,虽然静态类型语言使得实现某些模式稍有不同,但理解设计模式的原理和应用场景依然非常有价值。 此外,了解和...
* 通用设计模式:介绍常见的设计模式,例如单例模式、工厂模式和观察者模式。 * Linux BASH:介绍Linux BASH shell的基本命令和应用。 * 软件版本控制:介绍版本控制的概念和 Git 的使用。 Python 编程 * Python ...
18. **并发编程**:Java的并发包,线程池的实现原理,以及单例模式的实现都是热门话题。 19. **网络协议**:TCP/IP协议的区别以及如何设计通信方案。 20. **反射与注解**:了解Java反射机制和注解的应用。 21. **...
3. attrs: 类封装器,提供了对类的封装和操作,常用于实现单例模式、工厂模式等。 4. autobahn: 网络客户端和服务器,提供了WebSocket、WAMP等网络通信协议的实现,常用于实时通信和数据交换。 5. Automat: 有限...
7. **设计模式**:良好的软件设计往往采用设计模式,如单例模式用于管理Shell对象,工厂模式用于创建控件实例,观察者模式用于事件通知。 8. **UI布局和样式**:为了使应用程序看起来更专业,需要考虑界面的布局和...
在Python中,可以使用`__new__`方法实现单例。 3. 装饰器模式:在不修改类代码的情况下,增加类的功能。Python的装饰器是实现这一模式的优雅方式。 4. 观察者模式:定义了对象之间的一对多依赖关系,当一个对象的...
- 这是一种软件开发方法,基于类和对象,强调封装、继承和多态性,常见的设计模式有工厂模式、单例模式、观察者模式等。 4. **数字地球原理**: - 数字地球是一种集成地理信息、遥感数据、GIS技术的虚拟现实系统...
9. **设计模式**:在Java开发中,常见的设计模式如工厂模式、单例模式、观察者模式等可能会被用于提高代码的可读性、可维护性和扩展性。 10. **Web框架**:虽然没有明确提及,但考虑到Java Web应用的开发,很可能...
在Java中,我们可以应用各种设计模式,如工厂模式、单例模式、观察者模式、装饰器模式等。例如,如果我们需要动态地创建不同类型的脚本执行对象,可以使用工厂模式;而如果要确保脚本只被实例化一次,可以采用单例...
* 单例模式 * 工厂模式中的工厂方法 * 工厂模式中的抽象工厂 * 工厂模式的主要缺点 反射机制 * Java 反射机制 * 类加载器 * Java Reflection API (Class, Constructor, Field, Method) * 利用 Java 反射技术实现可...
- **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 - **装饰者模式**:动态地给一个对象添加一些额外的...
6. 设计模式:是软件工程中解决常见问题的经验总结,例如单例模式、工厂模式、观察者模式等,它们为良好的代码结构和可维护性提供了指导。 7. Java String源码:Java的String类是不可变的,深入研究其源码能帮助...
1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供一个全局访问点。在Linux环境下,这可能用于管理共享资源,如日志服务或线程池。 2. **工厂方法模式(Factory Method)**:定义一个用于创建对象的...