杀线程:
import threading
import time
import inspect
import ctypes
def _async_raise(tid, exctype):
"""raises the exception, performs cleanup if needed"""
tid = ctypes.c_long(tid)
if not inspect.isclass(exctype):
exctype = type(exctype)
res = ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, ctypes.py_object(exctype))
if res == 0:
raise ValueError("invalid thread id")
elif res != 1:
# """if it returns a number greater than one, you're in trouble,
# and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonapi.PyThreadState_SetAsyncExc(tid, None)
raise SystemError("PyThreadState_SetAsyncExc failed")
def stop_thread(thread):
_async_raise(thread.ident, SystemExit)
class testClass(threading.Thread):
def __init__(self,abc):
super().__init__()
self.out=abc
def run(self):
while 1:
print(self.out)
def print_time():
while 1:
print('234')
if __name__ == "__main__":
t = threading.Thread(target=print_time)
# t = testClass('123')
t.daemon=True
t.start()
time.sleep(0.5)
print(t.is_alive())
stop_thread(t)
time.sleep(0.5)
print(t.is_alive())
print(t.is_alive())
print(t.is_alive())
print("stoped")
while 1:
pass
windows杀进程:
def killport(port):
# 查找端口的pid
find_port = 'netstat -aon | findstr %s' % str(port)
result = os.popen(find_port)
text = result.read()
pid = text.strip().split(' ')[-1]
# 占用端口的pid
find_kill = 'taskkill -f -pid %s' % pid
print(find_kill)
result = os.popen(find_kill)
return result.read()
os.system()与os.popen()区别:
os.system只返回一个状态码 , 0为'成功' , popen通过result.read()可以得到控制台打印的信息.