2014-01-06 105 views
2

我的问题很简单 - 是否可以用Python来检查应用程序启动/产生的方式?检查应用程序如何启动?

的更多信息:

我有一个应用程序something.exe,现在我需要检查,如果something.exe已经启动是否由用户或者更确切地说,与运行它作为一个子进程的一些第三方应用程序。

是否可以检查?

+0

为什么这很重要知道吗?当你说代码由“第三方”发起时,你的意思是导入python模块或实际运行应用程序独立? – 2014-01-06 22:52:16

+0

@LegoStormtroopr我认为他试图检测debuger。 – eri

回答

2

使用标准库,它不可能在Windows中。在Unix中,像所有进程(除了init)都有一个父进程。

import os 
parent = os.getppid() 

您可以尝试检查os.environ。运行不同的方法可以设置稍微不同的环境或不设置任何变量。请参阅psutil。它具有许多过程管理功能。

+0

你的意思是'os.getppid()'不适用于Windows? – Lucas

+0

@Lucas http://docs.python.org/2/library/os.html#os.getppid可用性:Unix。 – eri

+0

@Lucas我正在使用Python2。在版本3.2中更改:添加了对Windows的支持。 – eri

1

我试图在Windows上使用psutil这种方法:

import psutil 

def get_process_mode(process_name): 
    process_mode = None 
    plist = psutil.get_process_list() 
    for process in plist: 
     try: 
      if process.name == process_name: 
       if process.parent: 
        process_mode = "third party app" 
       else: 
        process_mode = "user launched" 
       break 
     except psutil.AccessDenied: 
      print "'%s' Process is not allowing us to check its parent!" % process 
    return process_mode 

get_process_mode("something.exe")

但它并没有在某些情况下,工作好...

+0

请注意,在上面的代码中,我得到所有进程的列表,并检查是否存在具有给定名称的进程,然后如果进程具有父级,则它是第三方应用程序,在其他情况下,它是用户启动的应用程序。必须在Windows上处理AccessDenied异常,因为某些进程使用NT AUTHORITY \ SYSTEM用户启动,并且这些进程不可读。 – avenet

+0

不幸的是...''psutil.Process(pid = 8680)'进程不允许我们检查它的父节点''get_process_mode(__ file __)''。 – Lucas

相关问题