I have written my own Python-based job scheduler which uses the multiprocessing module, to spawn new jobs. I'm trying to implement a feature to kill a running process using os.kill
, but it is not working. My (simplified) code look like the following:
from multiprocessing import Process
import os
...
p = Process(target=self.start_job, args=(run_dir,cmd,))
p.start()
...
def start_job(self,run_dir,cmd):
os.chdir(run_dir)
os.system(cmd)
print os.getpid()
...
I want to take this pid that is output (e.g. 3064) and from another python session run:
import os, signal
os.kill(3064, signal.SIGTERM)
os.kill
works if I run it on the pid of the parent/spawning process, but it does not work if I execute it on the pid of the child/spawned process. In addition to SIGTERM, I've also tried a number of other signals such as SIGKILL, SIGQUIT, etc. None of them worked either. Any help would be greatly appreciated.
You do the equivalent with os. killpg() in Python.
kill() method in Python is used to send specified signal to the process with specified process id.
I solved this problem by creating a process group using the subprocess
module to create the process and using os.killpg()
to kill the process as described here: https://stackoverflow.com/a/4791612/2636544
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