当前位置:  技术问答>linux和unix

linux 下如何实现控制所有应用程序为单实例的????

    来源: 互联网  发布时间:2016-09-02

    本文导语:  现在因为 系统资源有限,所以限制 linux 系统中所有应用程序为单个实例,比如说,firefox 已经启动了,那么再单击它就不会启动第二个firfox,其他的一样,大家有什么好的办法?? 如果是自己的写的程序很容易实...

现在因为 系统资源有限,所以限制 linux 系统中所有应用程序为单个实例,比如说,firefox 已经启动了,那么再单击它就不会启动第二个firfox,其他的一样,大家有什么好的办法??
如果是自己的写的程序很容易实现这个功能,但是如何控制其他程序呢??

|

能否这样子,在启动某个程序的时候先判断该程序名是否在 ps -ef出来的结果中,如果在这个列表中就不启动

|
ps -ax | grep firefox  

查看进程是否已经存在,来确定是否再启动。

可以用 popen("ps -ax | grep firefox  ")  再处理返回值。

|
  这实际上由三个子问题组成:应用程序单实例运行、自动把窗口提到前面和把参数传递给第一个运行实例。对此我们考虑了下列方法:
  方法一:遍历
  /proc目录下的进程信息,如果应用程序对应的进程存在,则让认为应用程序已经在运行。然后强制关闭该应用程序,用新的命令行参数重新运行它。这样做的优点是实现简单,到达了我们预期的目标。缺点是强制kill第一个运行实例太野蛮,可能会造成数据丢失,另外创建新进程的开销会让用户感觉反应迟钝。
  方法二:通过窗口管理器实现,根据应用程序的窗口判断应用程序是否在运行。如果发现对应的应用程序已经在运行,把对应的窗口提到前面来。这要修改应用程序才行,只有应用程序自己才知道其拥有的窗口的关系,若不加考虑把应用程序的主窗口提到前面来,这也并不见得合适。这种方法只能解决前两个小问题,命令行参数还是无法传递给第一个运行实例。
  方法三:应用程序提供一个DBUS服务对象,第一个运行实例作为服务器运行,第二个运行实例作为客户端运行,第二个运行实例把命令行参数传递给第一个运行实例,然后就退出。第一个运行实例接受到新的命令行参数,作相应的处理,比如,把相应的窗口提到前面来,根据命令行参数进行处理。这是第二种方法的改进,可以实现全部的功能,缺点是要修改应用程序,不过DBUS服务对象可以通过一个公共库来实现,应用程序的改动并不大。

http://www.wangchao.net.cn/bbsdetail_557603.html

|
写个后台运行的监控程序,
不断判断所有的进程,
看是否有重复。
如果有,而且不是必要的,
就用pkill或killall来杀掉。
要kill掉的是PID较大的那个,
因为这个是后来执行的。

ps -e可以显示所有进程,
不管是哪个shell开启的。
好像 -ax也是,你可以去试试。

实现很简单。

|
在别的程序的启动脚本里添加一句判断就行了
如果该进程ID存在 就直接exit 1就行了 并输出该程序运行中 

|
一个进程启动后把它的pid保存在文件中,再次启动时判断这个pid在后台程序中是否存在

|
需要在程序里加互斥锁。

|
以前有篇帖子,讨论的不错,楼主参考吧!
能实现的方式还是比较多的。

http://topic.csdn.net/u/20080616/10/77b33ebd-cad4-4dda-8f35-8246e6f1959a.html

|
这种写入文件的方式还是有错的,如果在磁盘满的情况下是会失败的

    
 
 

您可能感兴趣的文章:

  • 怎样开发在LINUX 上运行的应用程序,像WINDOWS桌面应用程序一样
  • linux开发的应用程序部署到其他linux的问题
  • 新手提问:在REDHAT LINUX 下开发应用程序,用什么工具好,除了 LINUX C以外
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 学了linux程序设计后能不能编写出应用程序
  • 请问能否在linux实现一个应用程序访问另外一个程序的内存数据?
  • 几个Linux应用程序开发的问题请教LINUX程序员!
  • linux 桌面应用程序和web应用程序编写常用的语言
  • Linux应用程序启动器 Kupfer
  • 使用linux内核+qt开发的应用程序需要开源吗
  • linux驱动程序是怎样通过内核和应用程序通信,还有是怎样和硬件通信,跪求求解,谢谢高手留言。
  • 求教:Linux下Java应用程序的重启脚本
  • [求助]如何在linux下运行windows应用程序????
  • 用SecureCRT或Putty 远程启动linux服务器上的一个应用程序,但是当我关掉SecureCRT的时候,应用程序也被关掉了,怎么能够做到我关闭客户
  • 在Linux应用程序模式下如何设置中断!!!
  • 如何获取应用程序的当前路径(Linux)
  • 怎样设置应用程序随linux启动而启动!
  • linux 驱动中想用 kobject_uevent 和应用程序通讯. 但不知如何用?
  • 哪位大哥知道?我怎样知道LINUX redhat 7.2下声音设备由哪个应用程序占用?
  • 嵌入式Linux换了内核后,运行应用程序显示Killed
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 初学linux下的c有苦于找不到什么程序实例学习
  • 急需关于linux多线程的代码工程实例-高手请进啊
  • LINUX中实现单实例功能使用哪种IPC好啊?
  • Linux下Apache和tomcat一机多实例整合问题
  • 如何在Linux上实现同时只能启动一个实例的程序?
  • Linux上建立第二个ORACLE实例分析
  • 大家帮我推荐些在linux下用c语言对数据库操作编程的实例或资料吧!谢谢!
  • linux redhat5.6安装oracle11g在自动创建实例时停住不动,有图
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • linux网络编程小实例 client端连不上server端
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下通过crond实现自动执行程序
  • Linux和Unix相对WIN、NETWARE有什么好处?他们之间有什么区别?WIN、NETWARE能实现的功能LINUX和UNIX能实现吗?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • linux下如实现与window下的驱动器实现文件共享??
  • Linux内存文件系统(ramdisk)的三种实现方式
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • linux内存文件系统ramfs实现原理
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • Linux 共享内存介绍及实现代码
  • 我需要一个模型,在 LINUX C 下。实现线程间的控制,执行,阻塞,再执行。。。。。不知道如何实现。
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • 我想做linux下的还原备份,实现与还原精灵虚拟还原等一样的功能,应该怎么做?另外现在有实现这种功能的成熟产品是哪一种?
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 关于linux c程序实现自动实现telnet的问题
  • Linux c socket编程:简单的客户端(client)和服务端(server)实现
  • 请问高手linux中用md5来实现一串字符串的加密,用c++/c实现
  • 在linux实现在任意给定的目录查找文需要的件的程序? 下面的实现思路可不可以呢????
  • 请问:有没有人在Linux下实现过计费网关?
  • 关于XP系统下批处理文件如何实现执行linux下脚本,从而实现版本的自动化编译
  • 如何在linux下实现event事件机制
  • Linux音频, Linux下能否实现 实时语音聊天 ?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我需要一个模型,在 LINUX C 下。实现线程间的控制,执行,阻塞,再执行。。。。。不知道如何实现。 iis7站长之家
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3