首页
社区
课程
招聘
[讨论]如何快捷的判断某进程是否存在
发表于: 2013-10-21 19:22 21160

[讨论]如何快捷的判断某进程是否存在

2013-10-21 19:22
21160
假设要判断aaa.exe这个进程是否存在.(仅从进程名来入手,不考虑进程的窗口标题或者其他特征)

我能想到的方法大多是这种思路:

"枚举系统中所有进程,然后一个一个的比较进程名."

有没有其他比较快,不需要枚举所有进程再比较的方法呢?

类似于下面这种思路:

"比如说我们需要判断C盘下是否存在某个文件,常规思路是枚举出C盘下面的所有文件,再来一个个的对比文件名.,这个方法效率没有这个快: 直接调用CreateFile , 如果文件已经存在.那么GetLastError就会返回ERROR_ALREADY_EXISTS.这样程序就能很快知道这个文件存在."

我想过用openprocess,  但是openprocess的参数是进程id而不是进程名.  不知道有没有哪个api的参数是进程名,并且能够根据返回值判断出进程是否存在?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (32)
雪    币: 209
活跃值: (138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
进程名的列表本就是一个列表,本质上是一个搜索问题。枚举已然是最快的了。

进程的数量也大不了哪儿去,不值当的优化了。
2013-10-21 19:27
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
快是快    但是我的程序要不停地判断是否存在    这就相当于在不停地执行一个循环     一直在占用cpu啊
2013-10-21 19:33
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
就算是用openprocess判断一个pid是否存在也是要查表的,只不过这个查表的工作是由系统来做的……
2013-10-21 20:00
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
对啊  系统来做   那么等于是系统占用了cpu   在任务管理器里面   就看不出来是我的程序cpu占用升高    如果在我的程序里面了进行查表或者一系列的循环     那么任务管理器里面可以明显看出我的程序占用了cpu
2013-10-21 20:02
0
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
存下第一次找到的PID以后用PID判断进程存在就合你心意了.
2013-10-21 20:03
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
错……
还是显示的你的进程占用了cpu……
2013-10-21 20:19
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
原来这样   那有什么办法让进程占用cpu显示为0呢
2013-10-21 20:25
0
雪    币: 1392
活跃值: (4862)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
9
Sleep(10)
2013-10-21 20:30
0
雪    币: 163
活跃值: (1538)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
一秒执行一次查找就不占用 CPU啦
2013-10-21 21:06
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
先枚举.然后驱动挂回调
2013-10-21 21:13
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
aaa.exe如果知道其路径,比如是c:\windows\aaa.exe,那最简单的判断方法应该是delete c:\windows\aaa.exe。如果aaa.exe在运行,一般是无法删除文件的。
2013-10-21 21:19
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
13
如果知道目标文件位置的话,是否可以尝试以写入打开文件来判断呢?

楼山的删除太暴力了……
2013-10-21 22:22
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
FindWindowEx
2013-10-21 23:02
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
只知道进程名这个特征  无法知道窗口的任何信息
2013-10-22 01:20
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
路径未知  只知道进程名
2013-10-22 01:21
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
pssetcreateprocessnotifyroutine ?   R3下能否挂回调?
2013-10-22 01:24
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
利用WMI查询是最快的。"select * from win32_process where name="XXX.exe" "
但是加载com库有些麻烦。
其实就算枚举所有进程也只是一瞬间的事而已,一般cpu都飚不到 10%
2013-10-22 03:19
0
雪    币: 100
活跃值: (323)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
WinExec  "wmic process where name=\"notepad.exe\" > c:\123.xx"
然后判断 123.xx的文件大小
2013-10-22 15:14
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这个调用了wmic   本质上wmic还是枚举了进程   治标不治本啊
2013-10-22 16:50
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
2%已经让别人觉得高了
2013-10-22 16:52
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
启动一个线程做循环查找不就完事了,循环里适当的sleep
2013-10-22 17:57
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
这是常规方法   我在找个更简单的方法
2013-10-22 19:48
0
雪    币: 228
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
明显是在监控进程嘛,监控不是这样搞的
2013-10-22 20:36
0
雪    币: 102
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
CreateMutex作用是:找出当前系统是否已经存在指定进程的实例。如果没有则创建一个互斥体……
2013-10-22 21:30
0
游客
登录 | 注册 方可回帖
返回
//