linux u盘 uid pid,linux下的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) 锁的状态不会被子进程继承。如果进程关闭则锁失效而不管子进程是否在运行。 (Locks are associated with processes. A process can only have one kind of lock set for each byte of a given file. When any file descriptor for that file is closed by the process, all of the locks that process holds on that file are released, even if the locks were made using other descriptors that remain open. Likewise, locks are released when a process exits, and are not inherited by child processes created using fork.)

(5) 参考资料: fcntl(文件锁) 表头文件 #include #include 函数定义int fcntl(int fd, int cmd, struct flock *lock); 函数解释fd:文件描写符 设置的文件描写符,参数cmd代表欲垄断的号召 F_DUPFD 复制参数fd的文件描写符,厉行获胜则归来新复制的文件描写符, F_GETFD 获得close-on-exec符号,若些符号的FD_CLOEXEC位为0,代表在调用 exec()相干函数时文件将不会关闭 F_SETFD 设置close-on-exec符号,该符号以参数arg的 FD_CLOEXEC位定夺 F_GETFL获得open()设置的符号 F_SETFL改换open()设置的符号 F_GETLK获得文件锁定的事态,依据lock的描写,定夺是否上文件锁 F_SETLK设置文件锁定的事态,此刻flcok,构造的l_tpye值定然是F_RDLCK、F_WRLCK或F_UNLCK, 万一无法发生锁定,则归来-1 F_SETLKW 是F_SETLK的阻塞版本,在无法获得锁时会进去睡眠事态,万一能够获得锁可能捉拿到信号则归来 参数lock指针为flock构造指针定义如下 struct flock { ... short l_typejngaoy.com; short l_whence; off_t l_start; 锁定区域的开关位置 off_t l_len; 锁定区域的大小 pid_t l_pid; 锁定动作的历程 ... }; 1_type有三种事态: F_RDLCK读取锁(分享锁) F_WRLCK写入锁(排斥锁) F_UNLCK解锁 l_whence也有三种措施 SEEK_SET以文件开始为锁定的起始位置 SEEK_CUR以现在文件读写位置为锁定的起始位置 SEEK_END以文件尾为锁定的起始位置 归来值 获胜则归来0,若有讹谬则归来-1 l_len:加锁区的长度 l_pid:具有阻塞目前历程的锁,其持有历程的历程号储藏在l_pid中,由F_GETLK归来 等闲是将l_start设置为0,l_whence设置为SEEK_SET,l_len设置为0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/411895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习进度第4周

时间30小时代码量2000行左右博客园2知识点 知识点&#xff1a;从最基本的jsp连接数据库学习。 List<类名> listnew ArrayList<>()&#xff1a;这就像是一个容器。能把数据储存在 list里。 ResultSet rs&#xff1a;创建rs结果集可以用来接受储存数据。 rs…

昨夜的雨图片

昨天趟着淹没到屁股的雨水回家的&#xff0c;今天才知道&#xff0c;这是一场非常可怕的暴雨.本来就吓的够戗,现在直接两腿发软&#xff0c;几欲要哭了。想想真是后怕. 朋友说&#xff0c;你可真大胆,那么大雨你也敢趟.其实不是胆大,而是我走着走着水没的越来越往上了.幸亏个子…

[vue] 你有使用过JSX吗?说说你对JSX的理解

[vue] 你有使用过JSX吗&#xff1f;说说你对JSX的理解 jsx不是一门新的语言&#xff0c;是一种新的语法糖。让我们在js中可以编写像html一样的代码。 允许XML语法直接加入到JavaScript代码中&#xff0c;让你能够高效的通过代码而不是模板来定义界面个人简介 我是歌谣&#x…

linux qtopia-2.2.0编译,qtopia-2.2.0在linux上的安装(基于mini2440)

环境&#xff1a;fedora9、ubuntu10.04x86-qtopia、arm-qtopiagcc-4.3.x、g-4.3.xarm-linux-4.3.2一、x86-qtopia的安装x86-qtopia的安装不管在哪一版本中的linux中&#xff0c;必须采用gcc-4.3.x、g-4.3.x的编译器(或以下&#xff0c;没测试过)&#xff0c;编译过程才不会莫名…

微信支付开发流程

记录下微信JSAPI支付的流程 1、判断是微信浏览器则直接请求微信授权的链接&#xff0c;需要传递给微信重定向回的页面&#xff0c;及订单id // 微信浏览器直接调用 if (this.isWeixin) {let redirectUri http://192.168.1.6/weChatwindow.location.href https://open.weixin.…

vb对数据库操作用存储过程

存储过程如下create proc sp_recordset bbb int as select * from aaa where bbb bbbvb代码如下&#xff1a; Dim cmd As ADODB.Command Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim ADOPrm Set ADOPrm New ADODB.Parameter Set rs New AD…

[vue] `<template></template>`有什么用?

[vue] <template></template>有什么用&#xff1f; 包裹嵌套其它元素&#xff0c;使元素具有区域性&#xff0c;自身具有三个特点&#xff1a; *隐藏性&#xff1a;不会显示在页面中 *任意性&#xff1a;可以写在页面的任意地方 *无效性&#xff1a; 没有一个根元…

linux域文件夹权限设置密码,如何配置Linux 文件权限(经典详细版本: rwxst)

在Linux中&#xff0c;Linux文件权限一共分为三种。本文将向读者展示如何正确配置Linux文件权限。三种特殊权限简介SUID当一个设置了SUID 位的可执行文件被执行时&#xff0c;该文件将以所有者的身份运行&#xff0c;也就是说无论谁来执行这个文件&#xff0c;他都有文件所有者…

ASP如何限定中英文混合的文字输出字数?

1<%2字符串截取函数&#xff0c;用于信息标题 3strWord需要截取的字符串 4intByteLength显示的字节长度&#xff0c;1个汉字两个字节 5intPadDotAmount背截取后尾部补充点的个数 6字符串截取函数&#xff0c;用于信息标题 7Function FixString()Function FixString(ByVal st…

【译】索引进阶(十一):SQL SERVER中的索引碎片【上篇】

原文链接&#xff1a;传送门。 第十章节我们分析了索引的内部结构。有了这些关于索引结构的知识&#xff0c;我们便可以分析索引碎片了&#xff1a;其产生的原因&#xff0c;如何防止&#xff0c;以及何时可以不去关注它们。 一些背景知识 / 复习 以下知识对于理解索引碎片来说…

linux备份mysql部分表数据,linux mysql 数据按表名称备份

1、按表名称备份#!/bin/bash#user#数据库用户dbuser"root"#数据库密码dbpassword"chenyong"#时间date$(date %Y%m%d)#数据库名称dbnamesungrowv3#备份数据保存的路劲url/home/test/sql/#指定数据库的所以表tables$(mysql -u$dbuser -p$dbpassword -ss -e &…

Maverick.Net介绍 (来自http://www.cnblogs.com/RicCC/archive/2006/09/17/506890.html)

Maverick.Net介绍 Maverick.Net是Java社区开源MVC Web框架Maverick的.Net版本&#xff0c;相关资料可以查看项目主页。不管Maverick.Net的是非好坏&#xff0c;了解一下它的思想还是不错的。下面的内容是对Maverick.Net整体做一个简单的介绍&#xff0c;以求能够从全局的角度了…

惊了!最通俗易懂的Djongo入门竟然在这里!

Django简介python下有多款不同的web框架&#xff0c;Django是最有代表行的一种。许多成功的网站和app都基于djanfo。django是一个开源的web应用框架&#xff0c;由python写成。django采用了MVC的软件设计模式&#xff0c;即模型M,视图V和控制器C。Django特点强大的数据库功能&a…

linux z是什么文件夹,Linux znew初学者命令实例教程

原标题&#xff1a;Linux znew初学者命令实例教程您是否知道Linux提供了一种将.Z文件重新压缩为.gz文件的方法&#xff1f; 是的&#xff0c;znew命令可以让你这样做。 在本教程中&#xff0c;我们将使用一些易于理解的示例讨论此命令行实用程序的基础知识。 但在我们这样做之前…

使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

一、 获得证书... 21、 从CA获得... 22、 从windows2003证书服务中获得... 23、 使用makecert工具获得... 2二、 证书的保存... 21、 保存在证书存储区... 22、 以文件形式保存... 42.1. 带有私钥的证书... 42.2. …

第四届cccc团体程序设计天梯赛

蒟蒻的第一次参加天梯赛&#xff0c;也能也是最后一次参加天梯赛了&#xff0c;下半年打完icpc就要退役了&#xff0c;准备考研复习了 本人的第一次天梯赛&#xff0c;也是本校的第一次天梯赛&#xff0c;由于大家都缺少经验&#xff0c;痛失银奖&#xff0c;只拿了个铜奖回来&…