В настоящее время вы запускаете дополнительные процессы, что мешает отловить правильный процесс как возвращение из Popen.
Если возможно, запуск
proc = subprocess.Popen(['bash', '/home/alireza/.seiscomp3/program.sh'])
должен быть более прямым ипозвольте вам запечатлеть правильный процесс, что сделает остальную часть ответа полезной.
Учитывая, что вы передаете self
функциям запуска и остановки, это заставляет меня поверить, что это методы наобъект.Если вы можете сохранить дескриптор процесса, который вы создали в этом объекте, в новом поле, это позволит вам вытащить его обратно для использования в функции остановки.
def start(self):
filepath = '/home/sysop/.seiscomp3/program.sh'
# Just in case the path doesn't exist
self.proc = None
if os.path.exists(filepath):
Command = "gnome-terminal -e '/home/alireza/.seiscomp3/program.sh'"
# Assign to the internal field proc
self.proc = subprocess.Popen(['bash','-c', Command])
else:
print ("The executable file is missing. Check ~/.seiscomp3 directory ...")
def stop(self):
# Make sure that the object has the proc field (It should if it has been started.)
# AND
# Only try to terminate if there is a process running
if('proc' in dir(self) and self.proc):
self.proc.terminate()
Если они не являются методами,Вы можете вернуть proc
из функции запуска и передать его в функцию остановки.
start():
# Do stuff
return proc
stop(proc):
proc.terminate()