linux c 服务程序,Linux C 后台服务程序单进程控制

介绍

通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢?

本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁

若加锁不正常,说明后台服务进程已经在运行了,这时则直接报错退出

若加锁成功,说明后台服务进程没有在运行,这时可以正常启用进程

后台服务程序单进程控制

详细不多说,直接看代码

#include

#include

#include

#include

#include

#include

#define PID_BUF_LEN (20)

#define RUN_PID_FILE "/var/run/myserver.pid"

//服务进程单实例运行

//返回值: 1--正在运行,0--未运行,-1--出错

int server_is_running()

{

int fd = open(RUN_PID_FILE, O_WRONLY|O_CREAT);

if(fd < 0)

{

printf("open run pid err(%d)! %s

", errno, RUN_PID_FILE);

return -1;

}

// 加锁

// LOCK_SH 建立共享锁定。多个进程可同时对同一个文件作共享锁定。

// LOCK_EX 建立互斥锁定。一个文件同时只有一个互斥锁定。

if(flock(fd, LOCK_EX|LOCK_NB) == -1)

{

//加不上锁,则是服务正在运行,已上锁了

printf("server is runing now! errno=%d

", errno);

close(fd);

return 1;

}

// 加锁成功,证明服务没有运行

// 文件句柄不要关,也不要解锁

// 进程退出,自动就解锁了

printf("myserver is not running! begin to run..... pid=%ld

", (long)getpid());

char pid_buf[PID_BUF_LEN] = {0};

snprintf(pid_buf, sizeof(pid_buf)-1, "%ld

", (long)getpid());

// 把进程pid写入到/var/run/myserver.pid文件

write(fd, pid_buf, strlen(pid_buf));

return 0;

}

int main(void)

{

//进程单实例运行检测

if(0 != server_is_running())

{

printf("myserver process is running!!!!! Current process will exit !

");

return -1;

}

while(1)

{

printf("myserver doing ...

");

sleep(2);

}

return 0;

}

运行结果

运行程序,可知进程pid是6965

[root@lincoding singleprocess]# ./myserver

server is not running! begin to run..... pid=6965

myserver doing ...

myserver doing ...

myserver doing ...

myserver doing ...

myserver doing ...

myserver doing ...

myserver doing ...

myserver doing ...

/var/run/myserver.pid也记录此进程的pid号,ps auxf | grep myserver可知mysever进程一直运行着

[root@lincoding singleprocess]# cat /var/run/myserver.pid

6965

[root@lincoding singleprocess]#

[root@lincoding singleprocess]# ps auxf | grep myserver

root 6965 0.0 0.0 3924 460 pts/0 S+ 00:32 0:00 | \_ ./myserver

root 9976 0.0 0.0 103256 856 pts/1 S+ 00:35 0:00 \_ grep myserver

[root@lincoding singleprocess]#

此时,再运行myserver程序,这时会报错退出,因为检测到myserver程序已经在运行中,不可以起另外一个进程,从而达到了后台服务程序单进程控制

[root@lincoding singleprocess]# ./myserver

server is runing now! errno=11

myserver process is running!!!!! Current process will exit !

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

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

相关文章

索尼录音笔怎么导出录音内容_录音笔十大品牌名单出炉!录音笔十大品牌排名榜单揭晓!...

录音笔给我们高速发展的生活带来了很大的便利&#xff0c;市场上录音笔品牌繁多&#xff0c;很多数码视听品牌都推出了自己的录音笔产品&#xff0c;那么我们在选购的录音笔的时候如何选择好品牌的录音笔呢&#xff1f;下面一起来看看十款好用的品牌录音笔排行&#xff0c;希望…

快速列出所有字段_快速掌握目标课题的研究现状 | 应用实例

Graphical Abstract摘要本文旨在利用文献分析工具“Bibliometrix”及其交互界面“Biblioshiny”&#xff0c;基于文献数据库的检索结果&#xff0c;快速获取目标课题的关键信息。相较于传统人为反复阅读的方法&#xff0c;该方法可高效实现以下重要功能&#xff1a;拓展和获取更…

linux 引导程序修复工具,linux 引导修复工具

如果你有Windows 系统安装盘/ 启动盘&#xff0c;或者安装了DOS 工具&#xff0c;可以从Windows 进入纯DOS 界面的话&#xff0c;那么可以分别用 fixmbr 命令生成正确的引导文件boot.ini &#xff0c;和使用 fdisk /mbr 命令修复MBR 。详细请看windows xp 双系统卸载linux ubun…

驱动程序和应用程序之间的体系结构不匹配_修复Win10上的黑屏问题全攻略,并不高深,一看就会...

在Windows 10上&#xff0c;你可能会遇到的最烦人的问题之一是黑屏&#xff0c;因为你不会在屏幕上看到错误代码或消息以获取有关从何处开始进行疑难解答的提示。黑屏的发生可能有多种原因。它可能与最近的显卡驱动程序更新有关&#xff0c;或者可能在包含兼容性问题的功能更新…

常用各种芯片手册大全_【汇总】超全面!国内芯片60个细分领域知名代表企业...

国内芯片60个细分领域知名代表企业↓↓↓↓↓↓文章来源&#xff1a;ittbank软文广告与加入群互动交流群的朋友&#xff0c;请加小编微信交流加入微信交流的朋友&#xff0c;请备注&#xff1a;公司名字(公司简称)名字行业方便小编按行业区分邀请进群&#xff0c;术有专攻请自觉…

linux 创建路径函数,Linux函数库的创建方法(2)

2. 静态库的创建与使用静态库本质就是一组 .o 组成的压缩文件&#xff0c;扩展名为 .a / .lib代码如下&#xff1a;ar -crv libXXX.a mmmm.o nnnn.oXXX 是库名&#xff0c;mmmm.o nnnn.o 是要打包的目标文件。crv 参数&#xff0c;含义分别是c&#xff1a; do not warn if the …

文件被后台程序占用无法删除_win10重装后系统占用50G?只要做好这2步,运行比win7还快...

大家都清楚系统C盘是电脑的"生命"&#xff0c;一旦C盘出现"爆红"&#xff0c;那你离电脑死机也就不远了。如果你还无法体会到这种感觉&#xff0c;那你可以想象打开一个word文档都要看到鼠标在转圈&#xff0c;随即黑屏&#xff0c;啥都动不了的那种生无可…

plsql执行command命令控制台出现乱码_展现“管理员”的神级能力,有趣又实用的我的世界基础命令...

在上一篇文章《Minecraft基岩版(手机版、便携版、PE版)开服指南》中&#xff0c;我们介绍了《我的世界》基岩版的开服方法。然后这篇文章&#xff0c;就为那些了解更多细节的玩家&#xff0c;介绍一下常见的管理员命令。另外&#xff0c;由于《我的世界》有多个版本(JAVA版、基…

一键 linux桌面安装vnc,Ubuntu 16.04 LTS一键安装VNC

Ubuntu 16.04 LTS 安装VNC&#xff0c;在搜索上找了很多教程&#xff0c;不是太老&#xff0c;就是说的驴唇不对马嘴&#xff0c;所以忍不住写一些以正视听。Ubuntu 16.04 LTS是最近出的LTS版本系统&#xff0c;估计未来也会有长期的使用频率&#xff0c;配置好远程桌面&#x…

新一代人工智能发展规划_助力人工智能创新发展,新华三任合肥市新一代人工智能产业发展联盟理事单位...

近日&#xff0c;合肥市新一代人工智能产业发展联盟正式成立。合肥市委常委、常务副市长罗云峰出席成立大会并讲话&#xff0c;联盟相关指导单位领导、理事单位成员代表等参加会议。会上&#xff0c;紫光旗下新华三集团下属新华三信息安全技术有限公司副总裁王冬作为理事单位代…

sqlserver 查询中文查询不到 查询英文可以查到_估值数据和财报数据查询方法

为了让更多的读者朋友学会自己查阅估值数据和财报数据&#xff0c;根据自己查到的资料进行独立思考&#xff0c;帮助投资&#xff0c;二师父搜集整理了估值数据和财报数据的查询网站&#xff0c;并教给大家如何通过这些网站查阅到的数据来做投资决定。估值数据查询网站&#xf…

linux内核参数的程序,技巧-Linux内核参数调整办法

ulimit设置ulimit -n 要调整为100000甚至更大。 命令行下执行 ulimit -n 100000即可修改。如果不能修改&#xff0c;需要设置 /etc/security/limits.conf&#xff0c;加入* soft nofile 262140* hard nofile 262140root soft nofile 262140root hard nofile 262140* soft core …

java面试换背景颜色_实习|渣二本Java菜鸡0 Offer的春招血泪史,一定要主动去找实习呀!

作者&#xff1a;codingCoge链接&#xff1a;https://www.nowcoder.com/discuss/177823来源&#xff1a;牛客网前言:一个菜鸡的春招血泪史,共勉到现在还是0offer先玄学求一波Offer2019.3.27更新:三月快结束了,对我来说春招也基本落幕了.虽然好多大厂4月才开始招聘,不过我已经不…

python刷阅读_用Python汇集并生成每日教育动态

本文记录了“每日教育动态”想法的产生以及实现过程&#xff0c;分为三部分&#xff1a;想法由来及实现效果、实现步骤和实现后的一点想法。一、想法由来及实现效果教育学是一门理论与实践相结合的学科&#xff0c;实践起来人人都会&#xff0c;每天打开手机刷个公众号都是完成…

linux切换root报错,Linux用户切换到root后运行图形程序报错(*GLib-GIO-CRITICAL **)

用su切换到root用户后&#xff0c;运行某些带图形的程序&#xff0c;会报如下错误&#xff1a;(ImageProc_qt:3158): GLib-GIO-CRITICAL **: g_dbus_connection_register_object: assertion G_IS_DBUS_CONNECTION (connection) failed(ImageProc_qt:3158): GLib-GIO-CRITICAL *…

python程序打包多个py文件_不使用setup.py,打包 Python 项目

我编写了许多开源项目&#xff0c;并允许其他人通过PyPI访问这些项目。为此&#xff0c;我需要从这些项目构建一个源代码分发版(sdist)和一个可选的wheel包&#xff0c;并将二者上传到PyPI。最后&#xff0c;这个sdist和wheel包必须要能通过pip进行安装&#xff0c;以便其他人使…

软件工程软件开发成本度量规范_软件开发成本度量方法

软件成本度量一直都是软件行业的一个痛点问题。软件度量一度乱象丛生。拍脑袋的定价方式曾大行其道。软件成本度量的乱象直接导致了软件价格的诸多问题。比如预算费用存在浪费或不足的现象&#xff0c;招标存在投标额过低过高等非正常状况。这些情况都是因为度量标准的缺失&…

linux 神的编辑器,编辑器之神-vim的使用,编辑器神-vim

编辑器之神-vim的使用&#xff0c;编辑器神-vimvim即vi的升级版&#xff1b;在linux中&#xff0c;vi是vim的软链接&#xff0c;我们敲vi和vim出来的都是vim&#xff1b;纯手打&#xff0c;如有错误&#xff0c;敬请指出。vi的三种模式及简单使用vi三种模式命令模式(默认)&…

爬虫python下载视频_用python做爬虫下载视频

用python有一段时间了&#xff0c;对python是十二分喜爱&#xff0c;在我看来python是个好工具&#xff0c;可以轻松简洁的帮我完成一些我想要完成的工作。下面和大家分享一下我用python爬取某网站视频的案例。用python去保存网站的视频&#xff0c;主要是为了后续的查看和备份…

python3软件怎么用_Python3学习之路~4.4 软件目录结构规范

为什么要设计好目录结构?可读性高: 不熟悉这个项目的代码的人&#xff0c;一眼就能看懂目录结构&#xff0c;知道程序启动脚本是哪个&#xff0c;测试目录在哪儿&#xff0c;配置文件在哪儿等等。从而非常快速的了解这个项目。可维护性高: 定义好组织规则后&#xff0c;维护者…