独立的饺子 · 使用HtmlUnit库的Java下载器:下载 ...· 2 周前 · |
大方的烤地瓜 · c# 顶级语句 - 不使用 Main ...· 1 周前 · |
彷徨的机器人 · stringvar转变成str ...· 1 周前 · |
留胡子的汤圆 · SharePoint 搜索 REST ...· 5 天前 · |
没有腹肌的开水瓶 · Exception in thread ...· 5 天前 · |
老实的打火机 · jQuery获取动态生成的元素 - ...· 3 月前 · |
傻傻的针织衫 · 几行代码给MySQL增加日志实时输出函数-腾 ...· 7 月前 · |
坏坏的路灯 · c语言switch case用法数组赋值-掘金· 11 月前 · |
有腹肌的机器猫 · Installation ...· 1 年前 · |
我编写了一个应用程序,它启动第三方程序,从我的节目的电视频道下载媒体流。我正在使用的程序是rtmpdump.exe。它们作为独立的进程运行,如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = path + rtmpdump;
startInfo.Arguments = rtmpdump_argument;
startInfo.WorkingDirectory = path;
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process p = Process.Start(startInfo);
但是我想命名这些进程,所以如果我的程序崩溃或必须重新启动,那么我可以检查当前进程的名称,看看是否有一个名为"BBC世界新闻7“。类似这样的东西,以确定哪些已经启动,哪些正在运行。有可能吗?我想不出一个友好的名字。
您不能更改进程名称,但是可以:
扩展Alexei的话-您可以创建一个Dictionary< int,string >来跟踪您创建的进程ID /描述性名称。也许您应该将它写到一个文件中,以防程序崩溃--但是您需要一些特殊的启动处理来处理退出的进程。
在启动时,您可能希望在文件中读取,并检查当前进程是否与您拥有的进程匹配,并删除任何不再存在的进程(进程id或exe名称错误)。您可能希望在每次创建新进程并写入文件时都这样做。
这是一些你可以使用的代码。
public class ProcessTracker {
public Dictionary<int, string> Processes { get; set; }
public ProcessTracker() {
Processes = new Dictionary<int, string>();
public void AddProcess(Process process, string name) {
Processes.Add(process.Id, name);
//Check if what processes are still open after crash.
public void UpdateProcesses() {
List<Process> runningProcesses =
Process.GetProcesses().ToList();
Processes = Processes
.Where(pair => runningProcesses
.Any(process => process.Id == pair.Key))
.ToDictionary(pair => pair.Key, pair => pair.Value);
//Use this to see if you have to restart a process.
public bool HasProcess(string name) {
return Processes.Any(pair => pair.Value != name);
//Write the file on crash.
public void ReadFile(string path) {
if (!(new FileInfo(path).Exists))
return;
using (StreamReader reader = new StreamReader(path)) {
foreach (string line in reader.ReadToEnd()
.Split(new[] {"\n"}, StringSplitOptions.RemoveEmptyEntries)) {
string[] keyPair = line.Split(',');
Processes.Add(int.Parse(keyPair[0]), keyPair[1]);
//Read the file on startup.
public void SaveFile(string path) {
using (StreamWriter writer = new StreamWriter(path, false)) {
foreach (KeyValuePair<int, string> process in Processes) {
writer.WriteLine("{0},{1}",
process.Key, process.Value);
}
将进程信息写入文件(或内存映射文件)可能是一种方法;
但是,您也可以查看windows消息传递。即向每个进程发送一条消息;并让他们用“内部名称”进行回复。
基本上,您可以侦听该队列中的所有内容;首先发送一个命令命令另一个进程报告其内部名称,然后将其与自己的进程id一起转储到消息队列中;
请参阅 MSMQ
我对自己也有同样的问题,因为我的解决方案创建了一个 新类-- MyProcess , 继承了Process中的 , 添加了一个property - ProcessId 。
在我的例子中,我将ProcessId存储在与其他数据相关联的db上。根据其他数据的状态,我决定终止该进程。
然后,我将进程存储在一个 字典 上,如果需要的话,它可以传递给其他类,在那里可以访问来终止进程。
因此,当我决定终止一个进程时,我会通过ProcessId从字典中提取这个过程,然后终止它。
样本如下:
public class Program
private static Dictionary<string, MyProcess> _processes;
private static void Main()
// can store this to file or db
var processId = Guid.NewGuid().ToString();
var myProcess = new MyProcess
StartInfo = { FileName = @"C:\HelloWorld.exe" },
ProcessId = processId
_processes = new Dictionary<string, MyProcess> {{processId, myProcess}};
myProcess.Start();
Thread.Sleep(5000);
// read id from file or db or another
var pr = _processes[processId];
pr.Kill();
Console.ReadKey();
没有腹肌的开水瓶 · Exception in thread “main“ org.apache.spark.sql.AnalysisException: Cannot write incompatible data to 5 天前 |
坏坏的路灯 · c语言switch case用法数组赋值-掘金 11 月前 |