I am trying to find out a way to detect if a process is running in Windows Task Manager for Windows OS and Macintosh Activity Monitor for MAC OS using Python
Can someone please help me out with the code please?
To check if process is running or not, let's iterate over all the running process using psutil. process_iter() and match the process name i.e. Check if there is any running process that contains the given name processName.
You can use psutil. Process().
We can get the pid for the current process via the os. getpid() function. We may also get the pid for the parent process via the os. getppid() function.
psutil is a cross-platform library that retrieves information about running processes and system utilization.
import psutil
pythons_psutil = []
for p in psutil.process_iter():
try:
if p.name() == 'python.exe':
pythons_psutil.append(p)
except psutil.Error:
pass
>>> pythons_psutil
[<psutil.Process(pid=16988, name='python.exe') at 25793424>]
>>> print(*sorted(pythons_psutil[0].as_dict()), sep='\n')
cmdline
connections
cpu_affinity
cpu_percent
cpu_times
create_time
cwd
exe
io_counters
ionice
memory_info
memory_info_ex
memory_maps
memory_percent
name
nice
num_ctx_switches
num_handles
num_threads
open_files
pid
ppid
status
threads
username
>>> pythons_psutil[0].memory_info()
pmem(rss=12304384, vms=8912896)
In a stock Windows Python you can use subprocess
and csv
to parse the output of tasklist.exe
:
import subprocess
import csv
p_tasklist = subprocess.Popen('tasklist.exe /fo csv',
stdout=subprocess.PIPE,
universal_newlines=True)
pythons_tasklist = []
for p in csv.DictReader(p_tasklist.stdout):
if p['Image Name'] == 'python.exe':
pythons_tasklist.append(p)
>>> print(*sorted(pythons_tasklist[0]), sep='\n')
Image Name
Mem Usage
PID
Session Name
Session#
>>> pythons_tasklist[0]['Mem Usage']
'11,876 K'
Here's a spin off of eryksun's Windows specific solution (using only built-in python modules) dropping the csv import and directly filtering tasklist output for an exe name:
import subprocess
def isWindowsProcessRunning( exeName ):
process = subprocess.Popen(
'tasklist.exe /FO CSV /FI "IMAGENAME eq %s"' % exeName,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True )
out, err = process.communicate()
try : return out.split("\n")[1].startswith('"%s"' % exeName)
except: return False
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With