同一目录的程序,同时只能运行一个

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一目录的程序,同时只能运行一个相关的知识,希望对你有一定的参考价值。

最近下了个中银国际的看盘软件,但是有个问题:在关掉它之后再想运行,就会提示“同一目录的程序,同时只能运行一个”。右下角也没有显示它的图标啊,难道它在后台运行?进程里好像也找不到啊?哪位大虾知道怎么回事?

  有时候需要只允许程序只能同时运行一个实例。实现方式有很多。
一. 进程互斥
原理:通过获取系统进程列表,如果发现有重名的,则表示程序已经运行了,此时新运行的进程就退出;
实现:System.Diagnostics.Process类的静态方法GetProcessesByName(string processName)
Process[] ps = Process.GetProcessesByName(Guo.exe);if(ps !=null&& ps.Length1)//发现重复进程
写在Main方法里;判断Length大于1,是因为本身启动之后也在进程列表里了,第一次启动的时候Length==1;
优点:代码简单;
缺点:会把别的重名程序误认为是自己(如很多软件都有update.exe);可以通过复制多个exe并起不同名字来达到运行多个实例的目的;
二. 共享锁(文件、注册表)
原理:运行程序时,在一个公共的位置创建一个共享值(如在固定目录创建一个文件,或者在固定的注册表位置创建一个值),退出程序时删除该值。若运行时发现值已经在,则表示程序已经在运行,此时新运行的进程就退出;实现:略;优点:逻辑好理解;
缺点:若程序没有正常退出,共享值没有被删除,会导致程序无法再启动;
三. 线程互斥
原理:通过一个唯一标识创建进程互斥体,启动时判断互斥体是否已经存在,若存在则表示是重复进程;
实现:使用System.Threading.MutexusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Runtime.InteropServices;namespaceConsoleApplication1classProgram///<summary///需要定义为类变量,而非局部变量///</summarystaticSystem.Threading.Mutex _mutex;staticvoidMain(string[] args)//是否可以打开新进程boolcreateNew;//获取程序集Guid作为唯一标识
Attribute guid_attr = Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
typeof(GuidAttribute));stringguid =((GuidAttribute)guid_attr).Value;_mutex=newSystem.Threading.Mutex(true
, guid,
outcreateNew);if(false==createNew)//发现重复进程_mutex.ReleaseMutex();优点:真正能做到同一个程序只允许运行一个进程。
参考技术A 在进程中可以找到的,应该是程序的设置有什么问题吧。本回答被提问者采纳

在同一个 Procfile 上运行两个程序

【中文标题】在同一个 Procfile 上运行两个程序【英文标题】:Run Two Programs Off The Same Procfile 【发布时间】:2020-10-13 05:25:40 【问题描述】:

我有 2 个 discord bot 程序,一个是 python 代码,另一个是 nodejs。我想知道是否在 procfile 中,比如当你说 worker: python ___ 时,有没有办法让它同时运行我的 python 文件和 codejs 文件?现在我只能得到或运行。

我现在的 procfile 只是: 工人:python log.py worker: 节点 bot.js

感谢您的帮助。

【问题讨论】:

【参考方案1】:

而不是你的 Procfile 是:

worker: python log.py
worker: node bot.js

你这样做:

worker: python log.py & node bot.js & wait -n

见:https://help.heroku.com/CTFS2TJK/how-do-i-run-multiple-processes-on-a-dyno

【讨论】:

非常感谢。如果我也想使用另一个 nodejs 程序怎么办?会不会是:worker: python log.py &amp; node.bot.js &amp; node.bot2.js &amp; wait -n 如果我的程序在文件夹中,会不会是:worker: python /folder/log.py 谢谢

以上是关于同一目录的程序,同时只能运行一个的主要内容,如果未能解决你的问题,请参考以下文章

各种操作系统的特点

一个PHP程序,同一时刻被请求多次,怎么让它只运行一次?

多线程

****多线程

操作系统概览

概念