关于网友提出的“ 在Linux下如何实现一个程序, 禁止某用户运行该程序多次?”问题疑问,本网通过在网上对“ 在Linux下如何实现一个程序, 禁止某用户运行该程序多次?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 在Linux下如何实现一个程序, 禁止某用户运行该程序多次?
描述: 在Linux下如何实现一个程序, 禁止某用户运行该程序多次?
解决方案1: 得用文件存储一点信息。或将信息存储在系统中。但是存在系统中,当下一次启动,就不好说了。
解决方案2:
方法一既然找出已经有进程在运行,不用kill直接中止就保证了只有一个进程在运行
解决方案3: 如歌可以修改程序的话,lz可以考虑下面的方面。
程序运行时,对执行文件加锁。退出时解锁。
这样,运行第二个实例时,会因为已经有运行的实例对执行文件加了锁,而无法执行。
解决方案4:
用uid来判断呢?
解决方案5: 写个SHELL不就完了?
shell第1步ps 这个进程
如果没有该就运行这个程序
有的话就不运行就好了
解决方案6: 方法一:遍历/proc目录下的进程信息,如果应用程序对应的进程存在,则让认为应用程序已经在运行。然后强制关闭该应用程序,用新的命令行参数重新运行它。这样做的优点是实现简单,到达了我们预期的目标。缺点是强制kill第一个运行实例太野蛮,可能会造成数据丢失,另外创建新进程的开销会让用户感觉反应迟钝。
方法二:通过窗口管理器实现,根据应用程序的窗口判断应用程序是否在运行。如果发现对应的应用程序已经在运行,把对应的窗口提到前面来。这要修改应用程序才行,只有应用程序自己才知道其拥有的窗口的关系,若不加考虑把应用程序的主窗口提到前面来,这也并不见得合适。这种方法只能解决前两个小问题,命令行参数还是无法传递给第一个运行实例。
方法三:应用程序提供一个DBUS服务对象,第一个运行实例作为服务器运行,第二个运行实例作为客户端运行,第二个运行实例把命令行参数传递给第一个运行实例,然后就退出。第一个运行实例接受到新的命令行参数,作相应的处理,比如,把相应的窗口提到前面来,根据命令行参数进行处理。这是第二种方法的改进,可以实现全部的功能,缺点是要修改应用程序,不过DBUS服务对象可以通过一个公共库来实现,应用程序的改动并不大。
以上介绍了“ 在Linux下如何实现一个程序, 禁止某用户运行该程序多次?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2277767.html