使类/过程/脚本“单一”的方式可以通过以下方式实现:

使类/过程/脚本“单一”的方式可以通过以下方式实现:

每天只用一句话学习英语,并且每天都有一点进步:“最好不要忽略过去,而要从中学习。

否则,历史可以重演。

,历史将重演”。

前言在某些情况下,我们不希望同时执行多个相同的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

深圳市相信过程科技有限公司❤舒先生❤欢迎您的咨询