gpt4 book ai didi

linux - Linux中的跨进程锁定

转载 作者:太空狗 更新时间:2023-10-29 11:29:40 26 4
gpt4 key购买 nike

我想在 Linux 中制作一个应用程序,一次只能运行一个应用程序实例。我想让它变得健壮,这样如果应用程序的一个实例崩溃,它就不会无限期地阻止所有其他实例。我真的很感激一些关于如何做到这一点的示例代码(因为网络上有很多关于这个主题的讨论,但我在尝试时找不到任何有用的东西)。

最佳答案

您可以使用 Linux 提供的文件锁定功能。您没有指定语言,但是您可能会以某种形式在几乎所有地方发现此功能。

这里有一个简单的想法,说明如何在 C 程序中执行此操作。当程序启动时,您可以使用 fcntl 系统调用对整个文件进行独占非阻塞锁定。当尝试启动应用程序的另一个实例时,它会在尝试锁定文件时遇到错误,这意味着该应用程序已经在运行。

这是一个如何使用 fcntl 获取完整文件锁的小示例(此函数提供了放置字节范围锁的便利,但是当长度为 0 时,整个文件被锁定)。

   struct flock lock_struct;

memset(&lock_struct, 0, sizeof(lock_struct));

lock_struct.l_type = F_WRLCK;
lock_struct.l_whence = SEEK_SET;
lock_struct.l_pid = getpid();

ret = fcntl(fd, F_SETLK, &lock_struct);

请注意,您需要先打开文件才能锁定。这意味着您需要有一个文件用于锁定。将它放在不会对其他应用程序造成任何干扰/混淆的地方可能很有用。

当进程终止时,它所占用的所有锁都将被释放,因此不会有任何阻塞。

这只是其中一个想法。我很确定还有其他解决方法。

关于linux - Linux中的跨进程锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18023013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com