用python记录运行pid,并在需要时kill掉它们

本文介绍了一种批量启动并记录爬虫进程PID的方法,通过nohup命令实现后台运行,同时使用Python脚本读取PID文件并批量终止进程。需要注意的是,在任务运行过程中,避免误杀其他进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  我在跑爬虫程序的时候,由于爬虫程序的等待目标服务器返回数据的时间很长,而cpu占用很低,所以经常挂着代理一跑就跑好几百个。但是爬虫程序通常是写了死循环,或直到分配给该进程的任务都跑完才退出的。如果我们想中途结束掉这些任务,是没办法手工一个一个kill掉的。那么该如何结束这些进程呢?

  我的方法就是在运行爬虫进程时,记录该进程的Pid,然后在需要手动结束时,再用语句kill掉它们。

for i in {1..100}
do
    nohup python NetEase_comms_proxy.py > hehe.dat 2>&1 & echo $! >> run.pid
    sleep 10
done

上述语句完成了将脚本在后台运行100便,并且将pid append到run.pid文件中。其中nohup 是 no hang up的缩写命令。do…done之间是被循环的语句。

  接下来就是kill掉它们的语句了,我用的python

import os

if __name__ == '__main__':
    fin = open('run.pid', 'r')
    pids = []
    for line in fin:
        pids.append(line.strip())
    for pid in pids:
        cmd = 'kill ' + pid
        os.system(cmd)

这样就把记录下来的pid全部kill掉了。
但需要注意的一点时,如果在任务运行期间,有的进程由于完成任务或者出错而退出。其他的程序可能会share这些进程的Pid,这样如果在运行kill脚本的时候,可能附带就把这些进程也给Kill掉了,造成不必要的麻烦。

<think>好的,我现在需要解决用户在VSCode中运行Python程序出现的'connect ENOENT'错误。根据用户提供的引用内容,特别是引用[3]提到了权限问题,以及管道不存在的情况,这可能与文件权限或路径配置有关。 首先,我要理解'connect ENOENT'错误的常见原因。ENOENT错误通常表示“没有这样的文件或目录”,即在尝试访问某个文件或套接字,路径不存在。用户提到在VSCode中运行Python程序遇到这个错误,可能与程序试图连接到某个不存在的Unix域套接字有关,例如/tmp/vscode-git-a7309d2889.sock这样的路径,这在引用[1]中出现过。 接下来,参考用户提供的引用内容,特别是引用[3]中的权限问题,可能涉及SSH配置或文件权限不正确。例如,.ssh/config文件的权限设置不当会导致连接问题。此外,VSCode可能尝试通过SSH连接到远程服务器,但权限问题导致无法建立连接,从而引发ENOENT错误。 我需要考虑的可能原因包括: 1. 文件或套接字路径不存在或权限不足。 2. SSH配置问题,尤其是.ssh目录或相关文件的权限。 3. VSCode的扩展或设置问题,特别是与远程开发相关的扩展。 4. Python环境或依赖库的问题,例如使用了需要特定权限的库。 针对这些可能性,我应该分步骤建议用户检查: - 检查错误信息中提到的具体路径是否存在,是否有访问权限。 - 验证.ssh目录及其文件的权限是否正确(例如,chmod 700 ~/.ssh,chmod 600 ~/.ssh/config)。 - 确保VSCode和相关扩展(如Remote - SSH)是最新版本,重新安装或禁用可能有冲突的扩展。 - 检查Python代码中是否存在硬编码的套接字路径,或网络连接配置错误。 - 尝试在终端中直接运行Python程序,排除VSCode特定环境的问题。 同,用户之前的问题涉及Git认证失败和SSH权限问题,可能需要综合这些信息。例如,Git使用SSH也可能涉及类似的权限配置,因此用户可能在多个地方遇到权限问题,需要统一处理。 最后,建议用户逐步排查,从路径权限到软件配置,再到代码检查,提供具体的命令行操作示例,如修改权限的命令,检查路径是否存在等,确保用户能逐步解决问题。</think>在VSCode中遇到`connect ENOENT`错误(通常伴随`ECONNREFUSED`或路径相关提示),可能由以下原因导致。以下是逐步排查和解决方案: --- ### 一、核心问题定位 `ENOENT`(Error NO ENTity)表示系统找不到指定路径,常见于以下场景: 1. **Unix域套接字文件丢失**(如`/tmp/vscode-*.sock`) 2. **权限不足**(如`.ssh`目录或配置文件权限错误) 3. **扩展配置冲突**(Remote-SSH/Python扩展配置异常) --- ### 二、分步解决方案 #### 1. 检查套接字文件路径 ```bash # 查看错误中提到的套接字文件路径(例如/tmp/vscode-*.sock) ls -al /tmp/vscode-*.sock # Linux/macOS dir C:\tmp\vscode-*.sock # Windows(若使用WSL) # 若文件不存在,尝试手动创建设置权限 sudo touch /tmp/vscode-test.sock && sudo chmod 777 /tmp/vcode-test.sock ``` **注意**:若路径涉及Windows本地文件系统与WSL的映射,需检查路径是否存在跨系统访问问题[^3]。 --- #### 2. 修复SSH配置权限(关键步骤) ```bash # 检查.ssh目录权限(必须700) chmod 700 ~/.ssh # 检查config文件权限(必须600) chmod 600 ~/.ssh/config # 检查known_hosts权限(必须644) chmod 644 ~/.ssh/known_hosts ``` **注意**:Windows用户需通过PowerShell设置权限: ```powershell icacls $env:USERPROFILE\.ssh\config /reset icacls $env:USERPROFILE\.ssh\config /inheritance:r icacls $env:USERPROFILE\.ssh\config /grant:r "$env:USERNAME:(R,W)" ``` --- #### 3. 重置VSCode远程组件 1. 卸载以下扩展: - Remote - SSH - Remote - Containers - Python扩展 2. 删除VSCode缓存目录: ```bash rm -rf ~/.vscode-server # Linux/macOS rm -rf %USERPROFILE%\.vscode\extensions # Windows ``` 3. 重新安装扩展重启VSCode --- #### 4. 检查Python环境配置 ```python # 在代码中添加路径验证 import os print("当前工作目录:", os.getcwd()) print("PATH环境变量:", os.environ['PATH']) ``` 若输出显示路径异常,需在VSCode设置中修正: ```json // settings.json { "terminal.integrated.env.linux": { "PATH": "/usr/local/bin:${env:PATH}" } } ``` --- ### 三、进阶排查方法 | 场景 | 检测命令 | 修复方案 | |------|---------|----------| | 文件锁冲突 | `lsof /tmp/vscode-*.sock` | 终止占用进程:`kill -9 <PID>` | | 防病毒软件拦截 | - | 将VSCode加入白名单 | | WSL文件系统权限 | `df -Th /tmp` | 在WSL中执行:`sudo umount /tmp && sudo mount -t tmpfs tmpfs /tmp` | --- ### 四、推荐工具验证 1. **SSH连接测试**: ```bash ssh -Tv git@gitee.com # 测试Gitee连通性 ``` 2. **网络调试工具**: ```bash strace -e trace=file python your_script.py # Linux跟踪文件操作 ``` --- ### 五、典型错误案例解析 ```log Error: connect ECONNREFUSED /tmp/vscode-git-a7309d2889.sock ``` **原因**:VSCode的Git凭证管理器尝试通过Unix套接字通信,但文件被误删或权限错误 **方案**: ```bash sudo rm -f /tmp/vscode-git-*.sock # 强制清理旧套接字 重启VSCode自动生成新套接字 ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值