取系统进程列表(进程信息)\x0d\计次循环首(取数组成员数(进程信息),记次)\x0d\如果真(进程信息[记次]进程名称=“QQ2013”)\x0d\ID=进程信息[记次]进程标识符\x0d\计次循环尾()
kill 命令用于向进程发送信号,可以用来终止或者修改进程的行为。
使用 kill 命令需要先知道进程的进程号 (PID),可以使用 ps 命令来获取进程的 PID,例如:
ps aux | grep process_name
其中 process_name 是进程的名称,可以使用进程的名称或者 PID 来执行 kill 命令。
下面是 kill 命令的基本用法:
kill [signal] PID
其中,signal 是要发送的信号,默认为 TERM (15) 信号,可以使用 kill -l 命令来查看所有可用的信号。PID 是要发送信号的进程的进程号。
例如,要终止 PID 为 123 的进程,可以执行以下命令:
kill 123
如果要使用其他信号,可以在命令中指定信号,例如:
kill -9 123
这将发送 KILL (9) 信号,强制终止进程。
注意:使用 kill 命令终止进程可能会导致数据丢失或其他不良后果,因此请谨慎使用。
楼主您好 VB技术部 为您解答在窗体上放置两个按钮 Command1 名字为开始获取 Command2 名字为停止获取 一个list 一个timer然后把timer 的属性 Enabled 设置为False Interval填写为1000 加入以下代码Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const SWP_NOMOVE = &H2
Dim s As String
Private Type POINTAPI
X As Long
Y As Long
End Type Private Sub Command1_Click()
List1Clear
Timer1Enabled = True
End SubPrivate Sub Command2_Click()
Timer1Enabled = False
End SubPrivate Sub Timer1_Timer()
Dim lpPoint As POINTAPI
Dim QQhwnd As Long
Dim sBuffer As String
sBuffer = Space(255)
GetCursorPos lpPoint
QQhwnd = WindowFromPoint(lpPointX, lpPointY)
GetWindowText QQhwnd, sBuffer, 255
List1AddItem sBuffer
End Sub 运行后点下按钮 然后鼠标按下你要获取的窗口 1秒自动获得进程名称 效果图
查看进程PID需要支持库,在“工具”“支持库配置”界面中选择“应用接口支持库 30“
确定后编写程序,在启动窗口上放置一个编辑框和一个按钮
鼠标双击按钮,易语言会自动添加“_按钮1_被单击”子程序
然后定义几个局部变量:
变量名 类型 静态 数组 备注
进程 进程信息 0
i 整数型
进程名称 文本型
进程PID 整数型
'下面就是获取PID的代码了,直接复制到易语言里即可
进程 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程), i)
如果真 (进程 [i]进程名称 = “explorerexe”)
进程PID = 进程 [i]进程标识符
进程名称 = 进程 [i]进程名称
编辑框1内容 = 到文本 (进程PID) + “:” + 进程名称
终止进程 (进程PID)
如果真结束
计次循环尾 ()
首先是获取特定进程对象,可以使用ProcessGetProcesses()方法来获取系统中运行的所有进程,或者使用ProcessGetCurrentProcess()方法来获取当前程序所对应的进程对象。当有了进程对象后,可以通过进程对象名称来创建PerformanceCounter类型对象,通过设定PerformanceCounter构造函数的参数实现获取特定进程的CPU和内存使用情况。
具体实例代码如下:
首先是获取本机中所有进程对象,分别输出某一时刻各个进程的内存使用情况:
using System;using SystemCollectionsGeneric;using SystemLinq;using SystemText;using SystemDiagnostics;using SystemThreading;namespace CSharpPerformance{//该程序可以实时监控所有进程或者指定进程的工作集、私有工作集 class Program { static void Main(string[] args) { //新建一个Stopwatch变量用来统计程序运行时间 Stopwatch watch = StopwatchStartNew(); //获取本机运行的所有进程ID和进程名,并输出哥进程所使用的工作集和私有工作集 foreach (Process ps in ProcessGetProcesses()) { PerformanceCounter pf1 = new PerformanceCounter("Process", "Working Set - Private", psProcessName); PerformanceCounter pf2 = new PerformanceCounter("Process", "Working Set", psProcessName); ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "工作集(进程类)", psWorkingSet64 / 1024); ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "工作集 ", pf2NextValue() / 1024); //私有工作集 ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "私有工作集 ", pf1NextValue() / 1024); } watchStop(); ConsoleWriteLine(watchElapsed); ConsoleReadLine(); } }}
其中,工作集psWorkingSet64是静态的,pf2NextValue()是动态变化的,工作集包含进程运行时其独占的内存和与其他进程共享的内存的和,而私有工作集是只包含进程独占的内存。
下面一组代码可以动态显示本程序所对应的进程的CPU和内存使用率的变化:
首先是SystemInfocs类:
using System;using SystemCollectionsGeneric;using SystemDiagnostics;using SystemThreading;using SystemIO;using SystemText;using SystemManagement;using SystemRuntimeInteropServices;namespace CSharpPerformance{ public class SystemInfo { private int m_ProcessorCount = 0; //CPU个数 private PerformanceCounter pcCpuLoad; //CPU计数器 private long m_PhysicalMemory = 0; //物理内存 private const int GW_HWNDFIRST = 0; private const int GW_HWNDNEXT = 2; private const int GWL_STYLE = (-16); private const int WS_VISIBLE = 268435456; private const int WS_BORDER = 8388608; #region AIP声明 [DllImport("IpHlpApidll")] extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder); [DllImport("User32")] private extern static int GetWindow(int hWnd, int wCmd); [DllImport("User32")] private extern static int GetWindowLongA(int hWnd, int wIndx); [DllImport("user32dll")] private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize); [DllImport("user32", CharSet = CharSetAuto)] private extern static int GetWindowTextLength(IntPtr hWnd); #endregion #region 构造函数 ///
/// 构造函数,初始化计数器等 ///
public SystemInfo() { //初始化CPU计数器 pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total"); pcCpuLoadMachineName = ""; pcCpuLoadNextValue(); //CPU个数 m_ProcessorCount = EnvironmentProcessorCount; //获得物理内存 ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mcGetInstances(); foreach (ManagementObject mo in moc) { if (mo["TotalPhysicalMemory"] != null) { m_PhysicalMemory = longParse(mo["TotalPhysicalMemory"]ToString()); } } } #endregion #region CPU个数 ///
/// 获取CPU个数 ///
public int ProcessorCount { get { return m_ProcessorCount; } } #endregion #region CPU占用率 ///
/// 获取CPU占用率 ///
public float CpuLoad { get { return pcCpuLoadNextValue(); } } #endregion #region 可用内存 ///
/// 获取可用内存 ///
public long MemoryAvailable { get { long availablebytes = 0; //ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT FROM Win32_PerfRawData_PerfOS_Memory"); //foreach (ManagementObject mo in mosGet()) //{ // availablebytes = longParse(mo["Availablebytes"]ToString()); //} ManagementClass mos = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject mo in mosGetInstances()) { if (mo["FreePhysicalMemory"] != null) { availablebytes = 1024 longParse(mo["FreePhysicalMemory"]ToString()); } } return availablebytes; } } #endregion #region 物理内存 ///
/// 获取物理内存 ///
public long PhysicalMemory { get { return m_PhysicalMemory; } } #endregion #region 结束指定进程 ///
/// 结束指定进程 ///
///
进程的 Process IDpublic static void EndProcess(int pid) { try { Process process = ProcessGetProcessById(pid); processKill(); } catch { } } #endregion #region 查找所有应用程序标题 ///
/// 查找所有应用程序标题 ///
///
应用程序标题范型
public static List
FindAllApps(int Handle) { ListApps = new List(); int hwCurr; hwCurr = GetWindow(Handle, GW_HWNDFIRST); while (hwCurr > 0) { int IsTask = (WS_VISIBLE | WS_BORDER); int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE); bool TaskWindow = ((lngStyle & IsTask) == IsTask); if (TaskWindow) { int length = GetWindowTextLength(new IntPtr(hwCurr)); StringBuilder sb = new StringBuilder(2 length + 1); GetWindowText(hwCurr, sb, sbCapacity); string strTitle = sbToString(); if (!stringIsNullOrEmpty(strTitle)) { AppsAdd(strTitle); } } hwCurr = GetWindow(hwCurr, GW_HWNDNEXT); } return Apps; } #endregion }}
然后是执行代码:
using System;using SystemCollectionsGeneric;using SystemLinq;using SystemText;using SystemDiagnostics;using SystemThreading;namespace CSharpPerformance{//该程序可以实时监控程序本身对应进程的工作集、私有工作集和CPU使用率 class Program { static void Main(string[] args) { //获取当前进程对象 Process cur = ProcessGetCurrentProcess(); PerformanceCounter curpcp = new PerformanceCounter("Process", "Working Set - Private", curProcessName); PerformanceCounter curpc = new PerformanceCounter("Process", "Working Set", curProcessName); PerformanceCounter curtime = new PerformanceCounter("Process", "% Processor Time", curProcessName); //上次记录CPU的时间 TimeSpan prevCpuTime = TimeSpanZero; //Sleep的时间间隔 int interval = 1000; PerformanceCounter totalcpu = new PerformanceCounter("Processor", "% Processor Time", "_Total"); SystemInfo sys = new SystemInfo(); const int KB_DIV = 1024; const int MB_DIV = 1024 1024; const int GB_DIV = 1024 1024 1024; while (true) { //第一种方法计算CPU使用率 //当前时间 TimeSpan curCpuTime = curTotalProcessorTime; //计算 double value = (curCpuTime - prevCpuTime)TotalMilliseconds / interval / EnvironmentProcessorCount 100; prevCpuTime = curCpuTime; ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", curProcessName, "工作集(进程类)", curWorkingSet64 / 1024,value);//这个工作集只是在一开始初始化,后期不变 ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", curProcessName, "工作集 ", curpcNextValue() / 1024,value);//这个工作集是动态更新的 //第二种计算CPU使用率的方法 ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}%", curProcessName, "私有工作集 ", curpcpNextValue() / 1024,curtimeNextValue()/EnvironmentProcessorCount); //ThreadSleep(interval); //第一种方法获取系统CPU使用情况 ConsoleWrite("r系统CPU使用率:{0}%", totalcpuNextValue()); //ThreadSleep(interval); //第二章方法获取系统CPU和内存使用情况 ConsoleWrite("r系统CPU使用率:{0}%,系统内存使用大小:{1}MB({2}GB)", sysCpuLoad, (sysPhysicalMemory - sysMemoryAvailable) / MB_DIV, (sysPhysicalMemory - sysMemoryAvailable) / (double)GB_DIV); ThreadSleep(interval); } ConsoleReadLine(); } }}
以上程序可以正常运行,没隔1S刷新一次,实现动态显示本程序对应进程的CPU和内存使用情况。
以上就是关于易语言如何获取指定进程的ID全部的内容,包括:易语言如何获取指定进程的ID、linux kill命令、VB6中如何获得指定进程名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)