Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find/kill a specific python program

Tags:

linux

grep

bash

ps

There are two different python programs running in this VM

one is a background job who monitors a folder and then 'does stuff' (with several workers)

10835 ?        Sl     0:03 python main.py
10844 ?        Sl    34:02 python main.py
10845 ?        S     33:43 python main.py

the second one is started via script

20056 pts/1    S+     0:00 /bin/bash ./exp.sh
20069 pts/1    S+     0:00 /bin/bash ./exp.sh
20087 pts/1    S+     0:10 python /home/path/second.py

i have tried numerous things to find a way to kill only the main program (i want to build a cron watchdog), but non succeded

first one i want to find only the hanging 'python main.py' process (accompanied by [defunct]), but i cant even find just this process alone.

the upper ones are from ps -ax (so they both are running currently) pgrep 'python' returns all PIDs, also from second.py which i dont want: (not usefull, so is pkill therefore)

pgrep 'python'
10835
10844
10845
20087

pgrep 'python main.py' always returns empty, so does pgrep 'main.py;

the only thing which works

ps ax | grep 'python main.py'

but this one also returns its own PID, grepping 'ps' isn't a prefered solution afair. when main.py hangs, it shows "python main.py [defunct]". a

ps ax | grep 'python main.py [defunct]'

is useless as test as it always returns true. pgrep for anything more than 'python' also returns always false. i am a bit clueless.

like image 306
Chris Avatar asked May 28 '13 17:05

Chris


People also ask

How do I kill a Python program in Windows?

If you are working on Windows, you have to terminate the executing process using the TerminateProcess function. The best way to do it is by opening the Task Manager. Locate the python.exe process that corresponds to your Python script, and click the "End Process".

How do I stop a Python script from running in the background?

# Simple script to start / stop a python script in the background. # To Use: # Just run: "./startstop.sh". If the process is running it will stop it or it will start it if not.

How do you kill a Python program in terminal?

As a side note, if you are looking to simply kill a python program that has taken over your terminal then press Ctrl+C to stop execution.


2 Answers

This works for me. Found it on the pgrep bro pages.

Find the pids of processes with 'test.py' as an argument, like 'python test.py'

pgrep -f test.py

And I use it to check if a python process is running:

searcher="backend/webapi.py"

if pgrep -f "$searcher" > /dev/null
then
    echo "$(date +%y-%m-%d-%H-%M-%S) $searcher is alive. Doing nothing."
else
    echo "No $searcher. Kickstarting..."
    pushd $HOME/there/;
    ./run_backend
    popd;
    echo "Pgrepping $searcher:"
    pgrep "$searcher" # out to loggers
fi
like image 95
irbanana Avatar answered Sep 22 '22 02:09

irbanana


In your daemon python script you should create PID file:

def writePidFile():
  pid = str(os.getpid())
  f = open('/tmp/my_pid', 'w')
  f.write(pid)
  f.close()

Now killing this process is simple:

kill `cat /tmp/my_pid`

Or you can just use grep and filter its own process:

ps ax | grep 'python main.py [defunct]' | grep -v grep
like image 28
Pavel Strakhov Avatar answered Sep 22 '22 02:09

Pavel Strakhov