题目描述:
(1)新建一个项目,在可视化界面中放置一个按钮可用于结束特定进程。
(2)拓展:进一步修改程序,给出一个列表显示正在运行的程序,让用户选择关闭哪个程序。
解题思路/算法分析/问题及解决
PID(Process Identification)操作系统里指进程识别号,也就是进程标识符。只要运行一程序,系统会自动分配一个标识。本次实验具体就是根据特定进程的pid然后点击相应的按钮kill该进程。
拓展部分可调用相关函数获取当前系统中所有进程相关信息,然后在listview中展现,让用户通过鼠标双击结束特定的进程。
实验代码
def clickedlist(self,qModelIndex):
try:
os.kill(self.dic[qModelIndex.row()],signal.SIGINT) #kill用户选中的进程
del self.dic[qModelIndex.row()] # 同步删除储存进程信息字典中该进程的信息
self.update() # 调用update函数更新listview中显示的内容
print("--------")
QMessageBox.information(self, "QListView", "你kill了: " + self.qList[qModelIndex.row()]+"进程")
print("点击的是:" + str(qModelIndex.row()))
except:
QMessageBox.critical(self, 'wrong','该进程无法删除')
def search(self):
pids = psutil.pids() # 获取当前系统中的进程信息
print(pids)
self.qList = []
for (idx, pid) in enumerate(pids): # 通过循环将进程信息在listview中显示出来
self.dic[idx] = pid
pid_info = "pid:{pid},name:{name}".format(pid=pid, name=psutil.Process(pid).name())
self.qList.append(pid_info)
self.update() # 调用update函数更新listview中显示的内容
def update(self):
self.qList = []
for key, val in self.dic.items():
pid_info = "pid:{pid},name:{name}".format(pid=val, name=psutil.Process(val).name())
self.qList.append(pid_info)
self.slm.setStringList(self.qList)
self.listView.setModel(self.slm)
self.label_num.setText(str(len(self.qList)))
def refresh(self):
pids = psutil.pids()
self.qList = []
for (idx, pid) in enumerate(pids):
self.dic[idx] = pid
pid_info = "pid:{pid},name:{name}".format(pid=pid, name=psutil.Process(pid).name())
self.qList.append(pid_info)
self.update()