是否有可能在python中杀死正在侦听特定端口的进程,例如8080?

Dam*_*mir 3 python python-2.7

是否有可能在python中杀死正在侦听特定端口的进程,例如8080?

我可以做netstat -ltnp | grep 8080kill -9 <pid>从python执行一个shell命令,但我想知道是否已经有一些模块包含按端口或名称杀死进程的API?

Too*_*ote 9

你可以使用psutil python模块.一些未经测试的代码应该指向正确的方向:

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
Run Code Online (Sandbox Code Playgroud)

  • 我运行此代码时“访问被拒绝”。如何“sudo”`proc.get_connections(kind='inet')`? (2认同)
  • 解决方案:捕获您没有权限的进程的异常。尝试: for conns in proc.connections(kind='inet'): ... except (PermissionError, psutil.AccessDenied): pass 请参阅 /sf/ask/1381216581/错误 (2认同)

Jop*_*ers 5

您可以使用子进程来实现此目的,然后将其杀死。

import os
import signal
from subprocess import Popen, PIPE

port = 1234
process = Popen(["lsof", "-i", ":{0}".format(port)], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()
for process in str(stdout.decode("utf-8")).split("\n")[1:]:       
    data = [x for x in process.split(" ") if x != '']
    if (len(data) <= 1):
        continue

    os.kill(int(data[1]), signal.SIGKILL)
Run Code Online (Sandbox Code Playgroud)