如何在分离模式下终止进程
How to kill a process in detached mode
我使用 PyQt5 在 Python 3.8 中开发应用程序。
我需要 运行 并且能够从 PyQT 表单中终止一个单独的进程。
当我使用 process.start 然后 process.kill 它会终止进程。
但是当我使用 process.startDetached()
时 process.kill()
不起作用。
下面是一个例子:
from form import Ui_MainWindow
from PyQt5 import QtWidgets
class myapp(QtWidgets.QMainWindow):
def __init__(self):
super(myapp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.process = QProcess(self)
self.ui.pushButton.clicked.connect(self.btnClicked)
self.ui.pushButton_2.clicked.connect(self.process.kill)
def btnClicked(self):
runstr = 'ping'
args = ['localhost','-t']
self.process.startDetached(runstr, args)
app = QtWidgets.QApplication([])
application = myapp()
application.show()
sys.exit(app.exec())
你能告诉我如何在分离模式下终止进程吗?
当您启动一个分离进程时,QProcess 无法终止该进程,因此在这些情况下,您必须获取子进程的 pid 并使用 OS 方法终止它,如对以下问题:
- How to terminate process from Python using pid?
- Is it possible to kill a process on Windows from within Python?
from PyQt5 import QtCore, QtWidgets
import psutil
from form import Ui_MainWindow
class MyApp(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyApp, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.process = QtCore.QProcess(self)
self.ui.pushButton.clicked.connect(self.start_process)
self.ui.pushButton_2.clicked.connect(self.stop_process)
self._pid = -1
@QtCore.pyqtSlot()
def start_process(self):
runstr = "ping"
args = ["localhost", "-t"]
self.process.setProgram(runstr)
self.process.setArguments(args)
ok, pid = self.process.startDetached()
if ok:
self._pid = pid
@QtCore.pyqtSlot()
def stop_process(self):
if self._pid > 0:
p = psutil.Process(self._pid)
p.terminate()
self._pid = -1
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
application = MyApp()
application.show()
sys.exit(app.exec_())
我使用 PyQt5 在 Python 3.8 中开发应用程序。
我需要 运行 并且能够从 PyQT 表单中终止一个单独的进程。 当我使用 process.start 然后 process.kill 它会终止进程。
但是当我使用 process.startDetached()
时 process.kill()
不起作用。
下面是一个例子:
from form import Ui_MainWindow
from PyQt5 import QtWidgets
class myapp(QtWidgets.QMainWindow):
def __init__(self):
super(myapp, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.process = QProcess(self)
self.ui.pushButton.clicked.connect(self.btnClicked)
self.ui.pushButton_2.clicked.connect(self.process.kill)
def btnClicked(self):
runstr = 'ping'
args = ['localhost','-t']
self.process.startDetached(runstr, args)
app = QtWidgets.QApplication([])
application = myapp()
application.show()
sys.exit(app.exec())
你能告诉我如何在分离模式下终止进程吗?
当您启动一个分离进程时,QProcess 无法终止该进程,因此在这些情况下,您必须获取子进程的 pid 并使用 OS 方法终止它,如对以下问题:
- How to terminate process from Python using pid?
- Is it possible to kill a process on Windows from within Python?
from PyQt5 import QtCore, QtWidgets
import psutil
from form import Ui_MainWindow
class MyApp(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MyApp, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.process = QtCore.QProcess(self)
self.ui.pushButton.clicked.connect(self.start_process)
self.ui.pushButton_2.clicked.connect(self.stop_process)
self._pid = -1
@QtCore.pyqtSlot()
def start_process(self):
runstr = "ping"
args = ["localhost", "-t"]
self.process.setProgram(runstr)
self.process.setArguments(args)
ok, pid = self.process.startDetached()
if ok:
self._pid = pid
@QtCore.pyqtSlot()
def stop_process(self):
if self._pid > 0:
p = psutil.Process(self._pid)
p.terminate()
self._pid = -1
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
application = MyApp()
application.show()
sys.exit(app.exec_())