鱼C论坛

 找回密码
 立即注册
查看: 165|回复: 5

[已解决]怎么用程序 命令关闭正在运行的 code-server?

[复制链接]
发表于 2024-6-20 13:51:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
怎么用程序  命令关闭正在运行的 code-server?
最佳答案
2024-6-21 11:44:43
blackantt 发表于 2024-6-21 11:36
# Popen.send_signal(signal)
#   向子进程发送信号。
# Popen.terminate()



这些我不太清楚,查了下:

Popen.terminate() 是发送终止信号,但是某些特殊情况下进程可能会忽略该信号

kill() 是强制杀死进程,缺点就是可能会导致程序没有清理完资源就被提前终止

对于我前面代码使用 taskkill 命令,只适用于 windows,但是上面两种方法可以跨平台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-6-21 11:03:17 | 显示全部楼层


Python 程序?

首先你要获取服务的端口,然后通过 netstat 命令查找端口对应进程地址:PID,最后 kill 杀死该 PID 即可

参考代码:
import subprocess


# 要关闭的服务端口
port = 7860

command = f'netstat -ano | findstr :{port}'
result = subprocess.run(command, capture_output=True, text=True, shell=True)

# 所有包含 :{prot} 字段的连接信息
lines = result.stdout.splitlines()

for line in lines:
    parts = line.split()
    if parts[1].endswith(f':{port}'):
        pid = int(parts[-1])
        break
else:
    pid = None


if pid:
    command = f'taskkill /F /PID {pid}'
    subprocess.run(command, shell=True)
    print(f"进程PID:{pid}\t服务端口为:{port}已经终止运行!")
else:
    print(f"找不到端口为:{port} 的进程PID!")


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-21 11:14:14 | 显示全部楼层
Twilight6 发表于 2024-6-21 11:03
Python 程序?

首先你要获取服务的端口,然后通过 netstat 命令查找端口对应进程地址:PID,最后 ki ...


用以下代码启动的code-server,有啥方便的办法停止它吗?  (只有先运行1次,它才能产生配置文件,然后我修改它产生的配置文件,然后想再次用修改过的配置文件启动)
import subproces
def iframe_thread():
    p = subprocess.Popen(['code-server'], stdout=subprocess.PIPE)
from threading import Thread
Thread(target=iframe_thread, daemon=True).start()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-21 11:28:16 | 显示全部楼层
blackantt 发表于 2024-6-21 11:14
用以下代码启动的code-server,有啥方便的办法停止它吗?  (只有先运行1次,它才能产生配置文件,然后 ...


Snipaste_2024-06-21_11-26-31.jpg

我看了下 subprocess.Popen 对象的属性,这里面有个实例属性 pid,应该就是你执行的进程 pid

那么 pid 就不用去搜索了,直接 pid = p.pid,然后杀死即可

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-6-21 11:36:38 | 显示全部楼层
Twilight6 发表于 2024-6-21 11:28
我看了下 subprocess.Popen 对象的属性,这里面有个实例属性 pid,应该就是你执行的进程 pid

那 ...

# Popen.send_signal(signal)
#   向子进程发送信号。
# Popen.terminate()
#   停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。
# Popen.kill()

这个可以用上吗?

#   杀死子进程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-6-21 11:44:43 | 显示全部楼层    本楼为最佳答案   
blackantt 发表于 2024-6-21 11:36
# Popen.send_signal(signal)
#   向子进程发送信号。
# Popen.terminate()



这些我不太清楚,查了下:

Popen.terminate() 是发送终止信号,但是某些特殊情况下进程可能会忽略该信号

kill() 是强制杀死进程,缺点就是可能会导致程序没有清理完资源就被提前终止

对于我前面代码使用 taskkill 命令,只适用于 windows,但是上面两种方法可以跨平台
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表