2014-01-06 129 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

相關問題