做封面的网站在哪里,wordpress 排序 插件,哈尔滨网站制作最新招聘信息,一个企业可以做几个网站想要实现的效果#xff0c;程序通过Process类一次启动cmd#xff0c;后台线程每隔一定时间#xff0c;向其输入命令#xff0c;获得并处理输出。
一、基本操作 首先#xff0c;通常操作的例子一抓一大把#xff1a;
1、通过Process启动cmd执行一条/多条#xff08;程序通过Process类一次启动cmd后台线程每隔一定时间向其输入命令获得并处理输出。
一、基本操作 首先通常操作的例子一抓一大把
1、通过Process启动cmd执行一条/多条连接命令
2、退出一条时可以在命令开头加“/c”自动退出或多条时最后输入exit退出
3、获取输出可以一行行读或者“读到末尾”这里划重点。
二、多次输入输出 首先Process的启动值创建出来
ProcessStartInfo psi new ProcessStartInfo()
{FileName C:\\Windows\\System32\\cmd.exe,UseShellExecute false,RedirectStandardOutput true,RedirectStandardInput true,RedirectStandardError true,CreateNoWindow true,
}; 然后后台启动开始进行输入
Task.Factory.StartNew(o
{ProcessStartInfo psi new ProcessStartInfo(){FileName C:\\Windows\\System32\\cmd.exe,UseShellExecute false,RedirectStandardOutput true,RedirectStandardInput true,RedirectStandardError true,CreateNoWindow true,};using (var _cmd Process.Start(psi)){_cmd.StandardInput.AutoFlush true;while (true){Thread.Sleep(2000);GetSocketPair();}}
}, this, null, TaskCreationOptions.LongRunning, TaskScheduler.Default);//你的代码笔者这里是要获取当前进程下TCP连接数量
private void GetSocketPair()
{if (_cmd null) return;string cmd $netstat -ano | findstr {Process.GetCurrentProcess().Id} |findstr TCP |find /C /V \\;string socketPairCount WriteCmd(cmd);
}//输入并获取输出的核心逻辑
private string WriteCmd(string cmd)
{//重点1自定义结束符号string suffix ###;string output ;//一行命令变两行主要使用自定义结束符号作为输入的结束标志同样也是输出的起始标志在正则匹配时if (!cmd.EndsWith(suffix))cmd $ echo {suffix};_cmd.StandardInput.WriteLine(cmd);string line ;//重点2不能通过_cmd.StandardOutput.EndOfStream作为while的条件因为程序未exit退出不在流的末尾该状态一直为false//输出的结束标志此时第二条echo自定义结束符号的命令已执行完毕while(!line.StartsWith(suffix)){//重点3不能通过_cmd.StandardOutput.ReadToEnd读取内容与重点2原理相同ReadToEnd需要流结束了才可以line _cmd.StandardOutput.ReadLine();if (!string.IsNullOrEmpty(line))output line\r;}if (timerSmp.CurrentCount 0)timerSmp.Release();Regex r new Regex(###.*###);string result r.Match(output).Value;//掐头去尾回车符号\rresult result.Replace(suffix, ).TrimStart(\r).TrimEnd(\r);return result;
}同样的后台线程启动后其他线程也可以调用WriteCmd方法执行指令不过要注意线程安全主要可能的问题是输出返回给错误的调用方。 如有多线程的需要可以通过使用lockawait/async异步方法中不适用、信号量等线程同步基元以保证线程安全。