使类/过程/脚本“单一”的方式可以通过以下方式实现:
每天只用一句话学习英语,并且每天都有一点进步:“最好不要忽略过去,而要从中学习。
否则,历史可以重演。
,历史将重演”。
前言在某些情况下,我们不希望同时执行多个相同的Linux进程或Shell脚本,因为同一进程会同时执行,这可能会破坏数据的一致性。
当然,在C ++代码中,有时希望确保程序中只有一个类的实例,并提供全局访问点来访问它,这就是所谓的“单例模式”。
只有一个实例很重要。
例如,一台打印机可以有多个打印任务,但是只有一个工作任务,而一个系统只能有一个窗口管理器或文件系统。
接下来,我们简要介绍以下内容:Linux命令控制过程是一个“单例”操作。
方法; C代码单进程控制的实现; C ++线程安全的“单例模式”(singleton mode)实现。
使用文本flock命令锁定脚本您可以使用flock命令锁定外壳脚本。
当多个进程可以执行相同的脚本时,这些进程需要确保其他进程未运行以避免重复执行。
通常,这样的进程将使用“锁定文件”,即,创建文件以告诉其他进程它正在运行。
如果它检测到该文件存在,则认为运行相同数据的进程正在运行。
flock命令来锁定脚本,请使用以下命令:flock& nbsp; -xn& ltb;锁定文件& nbsp; -c& nbsp;< shell脚本& gt; -x:获取默认项的排他锁,或称为写锁-n:非阻塞模式,当锁获取失败时,返回1而不是等待-c:执行命令或脚本实战演示1.写一个测试脚本test.sh#!& nbsp; / bin / bashecho& nbsp;“ Hello& nbsp;世界“ sleep& nbsp; 1000”。
flock命令锁定脚本flock& nbsp; -xn& nbsp./test.lock& nbsp; -c& nbsp;“ / root / test.sh”。
3.打开另一个bash窗口以运行相同的脚本和另一个bash窗口运行相同的脚本后,它将直接返回而无需获取锁。
它只能开始正常运行,直到上一个脚本运行完毕。
该应用场景可以使用Linux计时器/ etc / crontab中的flock命令来锁定脚本,以防止重复执行: (flock-xn&nbsp。
/ test.lock& nbsp; c / root / test.sh“)C代码以实现单进程控制。
通常后台服务器程序必须只有一个进程,那么如何控制单个进程呢?这个想法类似于上面提到的flock命令。
我们可以通过flock系统接口功能锁定文件。
如果锁定不正常,则意味着后台服务进程已经在运行,然后直接报告错误退出;如果锁定成功,则意味着后台服务进程未运行。
该过程何时可以正常启动。
用flock函数实现的单进程控制代码。
C程序单进程控制实战演习。
我们在主要功能中使用上述功能:int& nbsp; main(void){& nbsp;& nbsp;& nbsp;& nbsp; //处理运行检测的单个实例& nbsp;& nbsp;& ; nbsp;& nbsp; if(0& nbsp;!=& nbsp; server_is_running())& nbsp;& nbsp;& nbsp;& nbsp; {& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; printf(“ myserver& nbsp; process& nbsp; is& nbsp; running !!!!!!!& nbsp; Current&流程将退出! & nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;返回  -1;& nbsp;& nbsp ;& nbsp;}& nbsp;& nbsp;& nbsp; while(1)& nbsp;& nbsp;& nbsp;& nbsp; {& nbsp; {& nbsp ;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; printf(“ myserver& nbsp;做& nbsp; ...& nbsp; & nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp; sleep(2);& nbsp;& nbsp;& ; }     return  0;}运行该程序,可以看到进程pid是6965 [root @ lincoding& nbsp;单进程] / myserver 服务器    开始运行& nbsp; & nbsp;& nbsp;运行.....& nbsp; pid = 6965myserver  ...& nbsp; myserver  doing& nbsp; ...& nbsp;此时,如果再次运行同一程序,它将检测到该程序已经在运行,并且无法启动另一个进程,因此它将报告错误并退出。
[root @ lincoding 单个进程]#& nbsp; ./ myserv