server 11 disconnected unexpectedly 和Failed to launch debugger for child process 1434472的解决方案【已解决】

问题描述

在服务器多进程程序执行过程中,爆出了这两个错误。

server 11 disconnected unexpectedly 和Failed to launch debugger for child process 1434472。

解决方案

出现这个错误的根本原因是程序子进程没有随着主程序的结束而结束,因此导致数据被占用无法释放,所以无法执行新的程序。

解决办法就是杀死原来进程。方法如下:

方法一:根据进程编号杀死进程

例如:kill 1443286

方法二:终止你拥有的全部进程(一般要进入环境,杀死自己的所有进程)

kill -9 -1

方法三: killall 通过程序的名字,来杀死进程

例如: killall firefox

方法四:杀死全部进程

killall python

其中方法二是比较简单的,不用在意自己的程序具体id,只用杀死自己的进程就好。前提是需要先进入自己的环境,否则可能会把别人的进程杀死。

毕竟服务器很多情况是多人共用的。

当我杀死相关的进程后执行时候,程序跳过了主程序(多进程程序不执行)。我还以为是服务器资源不够,于是减少了进程个数,但是仍旧无法解决。

后来仔细分析程序逻辑,发现是数据应用出了错误。于是导致后面的都被跳出了,而不是没有执行。这种情况在数据执行中断过程中出现非常普遍。解决办法有两种:

(1)增加限制,某些运行过的数据直接跳出,从后续执行。

if(int(filename1 != "chb03_29.edf") & int(filename1 != "chb03_33.edf"):
    namelist.append(filename1)

这个方法就导致一些文件处理后,你就需要修改。 你就需要增加限制以避免程序重复执行。

(2)更改程序,使得数据输入能够在程序中断后随时开始,而不用需要更改数据标签或限制。

比如你想做一个有多个txt文档的数据预处理,名称为001.txt到100.txt,你就应该有程序能够从处理过的数据中获取文档目录,以避免程序重复执行之前的数据而浪费时间。

比如

def name_list_edf_unprocessed(folder_edf, folder_csv):
    #获取所有的edf文件
    # folder_edf  = "/home/LIST_2080Ti/njh/CHB-MIT-DATA/CHB-MIT"#原始数据文件夹
    namelist = []
    for a, b, c in os.walk(folder_edf):  #a代表所在根目录;b代表根目录下所有文件夹(以列表形式存在);c代表根目录下所有文件    
        for i in c:
            # print(i)  #结果与方法一相同
            if i.endswith(".edf"):
                namelist.append(i)

    #获取所有的csv文件,列表里面不含csv后缀,方便第三步比较
    # folder_csv = "/home/LIST_2080Ti/njh/CHB-MIT-DATA/epilepsy_eeg_classification/data_processing"#处理过数据文件夹
    namelist_csv = []
    for a, b, c in os.walk(folder_csv):  #a代表所在根目录;b代表根目录下所有文件夹(以列表形式存在);c代表根目录下所有文件    
        for i in c:
            # print(i)  #结果与方法一相同
            if i.endswith(".csv"):
                name_i = os.path.splitext(i)[0]
                namelist_csv.append(name_i)
                # print(name_i)

    #将不在去除后缀后不在csv中的文件建表
    num_count_pro = 0
    namelist2 = []
    for name_edf in namelist:
        name2 = name_edf[0:5]#例如,结果为chb04
        # print("name2:",name2)
        if (int(name2 != "chb01") & int(name2 != "chb02") & int(name2 != "chb20") & int(name2 != "chb21") & int(name2 != "chb22") & int(name2 != "chb23") & int(name2 != "chb24")
        ):
            name_edf1 = os.path.splitext(name_edf)[0]#去掉后缀,结果为chb04_38
            print("name_edf:",name_edf,"; name_edf1:",name_edf1)
            if name_edf1 in namelist_csv:
                # print(name_edf,"已经处理过")
                num_count_pro += 1
            else:
                namelist2.append(name_edf)
        # print("namelist2:",namelist2)
    print("num_count_pro:", num_count_pro)
    return namelist2

这个程序的目的就是一个做减法的过程,为没有处理过的数据建一个表。你任何时候中断,它重新执行时候都能直接获取那些没有执行过的数据。

这样就不用去一一修改了。

方法(2)能够一劳永逸,方法(1)则一中断就需要调整。

参考文章-如何杀死进程

Linux下批量终止(kill)多个进程_千与千与千的博客-CSDN博客

linux杀死进程的五种方法_杀进程_MrCoderr的博客-CSDN博客

linux上杀死进程命令:kill、pkill、killall杀死进程_linux杀死进程命令kill_点亮~黑夜的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/a1456123a/article/details/129425960