LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: jerboa

在LINUX中,如何设计一程序,使其只能运行一次

[复制链接]
发表于 2004-6-13 23:35:19 | 显示全部楼层
最初由 khj99 发表
某些著名的软件(apache,mysql)都是采用,运行后把自已的pid号写入到一个文件里面,比如httpd.pid。第二次运行发现存在这个文件,就退出。


我上次做一个小软件,也是用类似方法,
把pid写入一个文件中,退出时就清除文件,
程序运行时先检查存不存在这个文件,如果有,取出pid,
如果检查到有这个pid的进程就退出程序,

但有一个问题,如果程序是非法退出的,这个文件就会有上一次的进程的pid,
那么以后就不能正常运行了,于是我对各种退出情况都进行了处理,
比如CTRL+z,ctrl+c等退出,但如果你用kill -9杀死这个进程,因为SIGKILL是无法
捕获的,所以无法执行我本来要程序在退出时清理这个文件的工作,
下次就要手动去清除.
发表于 2004-6-15 09:54:56 | 显示全部楼层
在/var/run下建立pid文件并加锁,如果加锁失败则认为已运行。
发表于 2004-6-15 10:33:31 | 显示全部楼层
再写个程序监视进程,发现有多余的进程久kill
发表于 2004-6-15 15:44:08 | 显示全部楼层
关注
发表于 2004-6-15 22:21:59 | 显示全部楼层
最初由 jerboa 发表
我曾经在一个论坛上看到过这样的讨论,时间长了忘了,现在应用需要:软件只能一个在内存里运行,如果运行的程序不退出,再次运行它的话,它发现程序已经运行了,就自动退出。


重启动之后呢,
发表于 2004-10-26 17:59:28 | 显示全部楼层

如何判断一个进程是否在运行呢

读了以上的帖子学了很多东西,现在我想问一下,在linux下,如何在程序中判断一个进程在运行呢。比如说我想判断进程号为4234的进程是否运行,代码应该怎么写,用什么函数啊。这是我在看了以上的贴子后想到这个问题
发表于 2004-10-27 09:43:56 | 显示全部楼层
调用ps命令,然后分析返回结果。
发表于 2004-10-27 09:46:28 | 显示全部楼层
调用ps命令,然后分析返回结果。
发表于 2004-10-27 09:52:43 | 显示全部楼层
建立了pid文件后别把它关了,然后执行unlink(还可以再加个锁,不让别的进程打开),这样当你程序退出(无论什么方式退出),该文件都不会存在了,因为对该文件的索引值已是0!
发表于 2004-10-29 11:27:16 | 显示全部楼层

回复: 如何判断一个进程是否在运行呢

最初由 baiheng222 发表
读了以上的帖子学了很多东西,现在我想问一下,在linux下,如何在程序中判断一个进程在运行呢。比如说我想判断进程号为4234的进程是否运行,代码应该怎么写,用什么函数啊。这是我在看了以上的贴子后想到这个问题


kill (pid, 0)
On success, zero is returned.  
On error, -1 is returned, and  errno  is set appropriately.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表