Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here is an example of how to obtain the parent process id and name of the current running script. As suggested by <a href="https://stackoverflow.com/users/18771/tomalak">Tomalak</a> this can be used to detect if the script was started from the command prompt or by double clicking in explorer.</p> <pre><code>import win32pdh import os def getPIDInfo(): """ Return a dictionary with keys the PID of all running processes. The values are dictionaries with the following key-value pairs: - name: &lt;Name of the process PID&gt; - parent_id: &lt;PID of this process parent&gt; """ # get the names and occurences of all running process names items, instances = win32pdh.EnumObjectItems(None, None, 'Process', win32pdh.PERF_DETAIL_WIZARD) instance_dict = {} for instance in instances: instance_dict[instance] = instance_dict.get(instance, 0) + 1 # define the info to obtain counter_items = ['ID Process', 'Creating Process ID'] # output dict pid_dict = {} # loop over each program (multiple instances might be running) for instance, max_instances in instance_dict.items(): for inum in xrange(max_instances): # define the counters for the query hq = win32pdh.OpenQuery() hcs = {} for item in counter_items: path = win32pdh.MakeCounterPath((None,'Process',instance, None,inum,item)) hcs[item] = win32pdh.AddCounter(hq,path) win32pdh.CollectQueryData(hq) # store the values in a temporary dict hc_dict = {} for item, hc in hcs.items(): type,val=win32pdh.GetFormattedCounterValue(hc,win32pdh.PDH_FMT_LONG) hc_dict[item] = val win32pdh.RemoveCounter(hc) win32pdh.CloseQuery(hq) # obtain the pid and ppid of the current instance # and store it in the output dict pid, ppid = (hc_dict[item] for item in counter_items) pid_dict[pid] = {'name': instance, 'parent_id': ppid} return pid_dict def getParentInfo(pid): """ Returns a PID, Name tuple of the parent process for the argument pid process. """ pid_info = getPIDInfo() ppid = pid_info[pid]['parent_id'] return ppid, pid_info[ppid]['name'] if __name__ == "__main__": """ Print the current PID and information of the parent process. """ pid = os.getpid() ppid, ppname = getParentInfo(pid) print "This PID: %s. Parent PID: %s, Parent process name: %s" % (pid, ppid, ppname) dummy = raw_input() </code></pre> <p>When run from the command prompt this outputs:</p> <blockquote> <p>This PID: 148. Parent PID: 4660, Parent process name: cmd</p> </blockquote> <p>When started by double clicking in explorer this outputs:</p> <blockquote> <p>This PID: 1896. Parent PID: 3788, Parent process name: explorer</p> </blockquote>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload