
要取指定进程的ID,如果指定的进程是一个窗口相关的,而你又可以用 FindWindowEx 来取得他的 HWND 的话,那么就可以用 GetWindowThreadProcessId(HWND,&ID) 来取得ID值的
基本思路就是遍历所有的进程
BOOL GetProcessIdByName(LPTSTR szProcessName, LPDWORD lpPID)
{
// 变量及初始化
STARTUPINFO st;
PROCESS_INFORMATION pi;
PROCESSENTRY32 ps;
HANDLE hSnapshot;
ZeroMemory(&st, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
stcb = sizeof(STARTUPINFO);
ZeroMemory(&ps,sizeof(PROCESSENTRY32));
psdwSize = sizeof(PROCESSENTRY32);
// 遍历进程
hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0);
if(hSnapshot == INVALID_HANDLE_VALUE)
{
return FALSE;
}
if(!Process32First(hSnapshot,&ps))
{
return FALSE;
}
do
{
// 比较进程名
if(lstrcmpi(psszExeFile,szProcessName)==0)
{
// 找到了
lpPID = psth32ProcessID;
CloseHandle(hSnapshot);
return TRUE;
}
}
while(Process32Next(hSnapshot,&ps));
// 没有找到
CloseHandle(hSnapshot);
return FALSE;
}
下面的命令就是显示进程名称为cmdexe的pid,不过这里有一个问题就是获得的pid是包括双引号的,这个你要自己再处理一下。
for
/f
"delims=,
tokens=1,2
skip=3"
%%a
in
('tasklist
/fo
csv
/fi
^"imagename
eq
cmdexe^"')
do
echo
%%b
如果我给NeMaC的参数不同,用上述指令会列出所有NeMaC命令执行的信息
但是我只想获取其中ture command为
还是得到了两个PID值,因为我同时使用了两个NeMaC命令(在不同命令窗口输入)
一条是NeMaC -c 30 -m 25000 -r rulessample 20210101 private rule1
一条是NeMaC -c 120 -m 25000 -r cs2rules 20210101 private rule2
谢谢,另外,NeMaC是NeTraMet这个分析流的工具的一个组件。学习中分成两个脚本执行。请教中,如何用两脚本,要是对应NeMaC有N个进程呢?那又该如何是好换一个思路吧,我如何能得到一个进程的唯一子进程的pid?:用
ps -C NeMaC -f | grep rule1 | awk '{print $2}'
我已经能拿到想要kill的进程的pid了,其值例如为:12815
但是当我执行如下shell文件时确出错了
#!/bin/bash#PATH=“$PATH”:/home/gwei/myCode#myNeMaC=——ps -C NeMaC -f | grep myNeMaC1 | awk '{print $2}'——
kill -9 $myNeMaC它显示出来的错误信息是
: arguments must be process or job IDskill: 12815
kill -9 $myNeMaC
也可以杀掉进程,但是把上面这些写入一个。sh文件再执行就出错了怎麼办呢?移植到RH9後提示的错误信息是:
[root@gxnunc0504 myCode]# /bin/bash /killNeMaC1sh
: no such pidsh: line 6: kill: 21820
kill -9 $myNeMaC
上面就是我杀掉进程的教本killNeMaC1,其中echo $myNeMaC确认只剩下一个PID了,可是为什麼到了kill -9 $myNeMaC就运行不下去了呢。相关 *** 作和结果如下:
Process[] localByName = ProcessGetProcessesByName("QQ");
if (localByNameLength != 0)
{
foreach (Process a in localByName)
{
int pid = aId;
}
}
在dos下可以这样 tasklist /FI "IMAGENAME eq explorerexe" 基于此可以'给你个简单方便的程序
'创建如下控件:
'Command1,Text1,Timer1
'单击按钮,稍候片刻,在Text2中显示结果。
'===========================
Const p = "d:\atxt"
Private Sub Command1_Click()
Timer1Enabled = True
Timer1Interval = 1000
Text1Text = ""
Dim t As String
Shell "cmd /c echo >""d:\atxt""" '创建空文件
Shell "cmd /c" & "tasklist /FI ""IMAGENAME eq explorerexe""" & ">" & p '读取任务PID
End SubPrivate Sub Form_Load()
Timer1Enabled = FalseEnd SubPrivate Sub Timer1_Timer() '读取文件
Open p For Input As #1
Do While EOF(1) = False
Line Input #1, t
SS = SS + Trim(t)
Loop
Close #1
Text1Text = "PID=" & Split(Split(SS, "explorerexe")(1), "Console")(0) ‘提取字段
Timer1Enabled = False
End Sub
以上就是关于MFC如何获取指定进程的PID全部的内容,包括:MFC如何获取指定进程的PID、C++如何通过进程名取得PID(只用Windows API)、如何从批处理文件中获取进程PID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)