我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Linux下/var/run/目录下的pid文件详解及pid文件作用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Linux下/var/run/目录下的pid文件详解及pid文件作用

先给大家介绍下linux下/var/run/目录下的pid文件,具体详解如下所示:

linux系统中/var/run/目录下的*.pid文件是一个文本文件,其内容只有一行,即某个进程的PID。.pid文件的作用是防止进程启动多个副本,只有获得特定pid文件(固定路径和文件名)的写入权限(F_WRLCK)的进程才能正常启动并将自身的进程PID写入该文件,其它同一程序的多余进程则自动退出。

编程实现:

 调用fcntl()系统调用设置指定的pid文件为F_WRLCK锁状态,如果锁成功则写入当前进程的PID,进程继续往下执行;如果上锁失败则说明已经有同样的进程在运行了,当前进程退出。


#define PID_FILE "/var/run/xxxx.pid"
int lock_file(int fd)
{
  struct flock fl;
  fl.l_type = F_WRLCK;
  fl.l_start = 0;
  fl.l_whence = SEEK_SET;
  fl.l_len = 0;
  return (fcntl(fd, F_SETLK, &fl));
}
int alone_runnind(void)
{
  int fd;
  char buf[16];
  fd = open(PID_FILE, O_RDWR | O_CREAT, 0666);
  if (fd < 0)
  {
    perror("open");
    exit(1);
  }
  if (lock_file(fd) < 0)
  {
    if (errno == EACCESS || errno == EAGAIN)
    {
      close(fd);
      printf("alone runnind\n");
      return -1;
    }
    printf("can't lock %s: %s\n", PID_FILE, strerror(errno));
  }
  ftruncate(fd, 0);  //设置文件的大小为0
  sprintf(buf, "%ld", (long)getpid());
  write(fd, buf, strlen(buf) + 1);
  return 0;
}

需要注意:

1.程退出后该进程加的锁自动失效;
2.进程关闭了该文件描述符fd,则加的锁失效。(所以整个进程生命周期内不能关闭该fd);
3.锁的状态不会被子进程继承,如果进程关闭则失效而不管子进程是否运行。

下面介绍下Linux下/var/run目录下的pid文件作用

在Linux系统的目录/var/run下面一般我们都会看到很多的*.pid文件。而且往往新安装的程序在运行后也会在/var/run目录下面产生自己的pid文件。那么这些pid文件有什么作用呢?它的内容又是什么呢?

(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。

用cat命令可以看到。

(2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。

(3) 编程技巧:

调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK。

如果成功锁定,则写入进程当前PID,进程继续往下执行。

如果锁定不成功,说明已经有同样的进程在运行了,当前进程结束退出。


lock.l_type = F_WRLCK;
 lock.l_whence = SEEK_SET;

 if (fcntl(fd, F_SETLK, &lock) < 0){
  //锁定不成功, 退出......
 }
sprintf (buf, "%d\n", (int) pid);
 pidsize = strlen(buf);
 if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){
  //写入不成功, 退出......
 }

 (4) 一些注意事项:

i) 如果进程退出,则该进程加的锁自动失效。
ii) 如果进程关闭了该文件描述符fd, 则加的锁失效。(整个进程运行期间不能关闭此文件描述符)
iii) 锁的状态不会被子进程继承。如果进程关闭则锁失效而不管子进程是否在运行。

总结

以上所述是小编给大家介绍的Linux下/var/run/目录下的pid文件详解及pid文件作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Linux下/var/run/目录下的pid文件详解及pid文件作用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux下/var/run/目录下的pid文件详解及pid文件作用

先给大家介绍下linux下/var/run/目录下的pid文件,具体详解如下所示: linux系统中/var/run/目录下的*.pid文件是一个文本文件,其内容只有一行,即某个进程的PID。.pid文件的作用是防止进程启动多个副本,只有获
2022-06-04

Linux下/var/run/目录下的pid文件有什么用

这篇文章主要介绍了Linux下/var/run/目录下的pid文件有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先给大家介绍下Linux下/var/run/目录下的p
2023-06-09

MySQL bin目录下的文件详解及作用介绍

MySQL bin目录下的文件详解及作用介绍MySQL是一种流行的关系型数据库管理系统,其bin目录下存储着许多重要的可执行文件和脚本。本文将详细介绍MySQL bin目录下的一些主要文件及其作用,同时提供代码示例帮助读者更好地理解。my
MySQL bin目录下的文件详解及作用介绍
2024-03-01

Linux proc目录下子文件或子文件夹有什么作用

这篇文章主要介绍“Linux proc目录下子文件或子文件夹有什么作用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux proc目录下子文件或子文件夹有什么作用”文章能帮助大家解决问题。一.
2023-07-05

vue引用public目录下文件的方式详解

由于一些演示需要对一些简单页面进行配置,由于打包build后的vue项目基本已经看不出原样,因此需要创建一个文件,并在打包的时候不会进行编译,所以文件放在public,下面这篇文章主要给大家介绍了关于vue引用public目录下文件的相关资料,需要的朋友可以参考下
2022-11-13

详解Linux查找目录下的按时间过滤的文件

在维护项目中,有时会指定都一些条件进行过滤文件,并对该批文件进行操作;这时我们将使用shell命令进行操作;直接上代码#!/bin/sh #BEGIN#`find ./ ! -name "." -type d -prune -o -newe
2022-06-04

详解C/C++如何获取路径下所有文件及其子目录的文件名

这篇文章主要为大家详细介绍了在C/C++中如何获取路径下所有文件及其子目录的文件名,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-03-14

Linux下core文件的使用方法详解

前言 有时候程序会异常退出而不带任何日志,此时就可以使用 code 文件进行分析,它会记录程序运行的内存,寄存器,堆栈指针等信息 什么是core文件通常在 linux 下遇到程序异常退出或者中止,我们都会使用 core 文件进行分析
2022-06-04

读写Android中assets目录下的文件的方法详解

Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件比较简单,通过R.XXX.ID即可; 第二种是assets目录下存放的
2022-06-06

ssm框架下web项目,web.xml配置文件的作用(详解)

1. web.xml中配置了CharacterEncodingFilter,配置这个是拦截所有的资源并设置好编号格式。encoding设置成utf-8就相当于request.setCharacterEncoding("UTF-8");for
2023-05-30

DEDECMS根目录下面的相关文件的作用介绍

做网站用DEDE的朋友不在少数,我觉得别人推荐的可能占了大多数,还有的就是因为别人说php+mysql好,比较安全,然后就开始到网上编程客栈查找相关的 cms,而DEDE一般是别人的首推,所以新人也就开始使用DEDE了,然后就成为了一种习惯
2022-06-12

Linux下怎么使用cp命令复制文件及复制目录

本篇内容介绍了“Linux下怎么使用cp命令复制文件及复制目录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  Linux下cp命令的用法主
2023-06-13

Linux下如何进行文件或者目录的打包及压缩、解压

这篇文章将为大家详细讲解有关Linux下如何进行文件或者目录的打包及压缩、解压,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linux下对于文件或者目录的打包及压缩、解压等操作压缩tar –
2023-06-05

linux如何复制一个目录下的所有文件到当前工作目录

本文介绍了在Linux系统中使用命令行复制目录及其内容到当前工作目录的方法,包括使用cp、rsync和tar命令,以及使用GUI文件管理器。文章强调了使用-r或-a选项保留文件属性和时间戳的重要性,并提醒目标目录必须存在才能成功复制。
linux如何复制一个目录下的所有文件到当前工作目录
2024-04-02

Linux rm命令详解 Linux删除文件目录的操作方法

目录rm 命令作用:删除文件或目录一、常用操作1. 删除文件2. 删除目录二、其他操作rm 命令 作用:删除文件或目录 参数: -f 直接删除,不需要确认。-r 递归删除(用来删除目录)-i 删除前逐一询问。-
2023-01-28

Linuxrm命令详解Linux删除文件目录的操作方法

这篇文章主要介绍了Linuxrm命令详解,Linux删除文件目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-01-28

详解Linux下的sudo及其配置文件/etc/sudoers的详细配置

详解Linux下的sudo及其配置文件/etc/sudoers的详细配置 1.sudo介绍sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su
2022-06-04

编程热搜

目录