在服务器上通过运行模型的时候,时常会遇到两种问题:
问题一的解决方法
解决这个问题的方法是可以通过nohup命令让模型继续在后台跑,自己电脑可以正常使用,只需要过段时间登上服务器查看nohup.out输出的结果。同时也可以用screen命令使服务器不间断的训练模型
nohup的使用可以参考这位博主的
不间断训练模型
screen命令可以参考这位博主的
Linux服务器断网后模型继续训练–screen
对于screen命令本人不太熟悉,个人推荐使用nohup命令,在恢复训练时可以设置参数来保存模型权重文件,在恢复训练时使用之前的模型权重继续训练就好了
问题二的解决方法
linux可以使用kill命令来停止一个进程,但是对于kill命令的了解甚少,很容易出现杀错进程导致服务器崩溃的时候,可以参考kill命令的官方文档来了解kill的使用方法kill官方文档
也可以参考他人的文章Linux中的Kill命令
这里进行一下翻译,可能有翻译有误的地方,欢迎指出
KILL(1P) POSIX程序员手册 KILL(1P)
PROLOG
本手册页面是《POSIX程序员手册》的一部分。 该接口的
该接口的Linux实现可能有所不同(请查阅
关于Linux行为的细节,请查阅相应的Linux手册页)。
或者该接口可能没有在Linux上实现。
名称
kill - 终止进程或发出信号
例子
kill -s signal_name pid…
kill -l [exit_status] kill [-signal_name] pid... kill [-signal_number] pid...
描述
kill工具将向每个pid操作数指定的一个或多个进程发送一个信号。
发送一个信号,该信号由每个pid操作数指定。
对于每个pid操作数,kill工具应执行以下操作 相当于POSIX.1-2017中系统接口卷中定义的kill()函数。 接口卷中定义的kill()函数,该函数被调用时的参数如下 参数。 * pid操作数的值应被用作pid 参数。 * sig参数是由-s选项指定的值。 sig参数是由-s选项、-signal_number选项或-signal_name选项指定的值,或者由 SIGTERM,如果没有指定这些选项。
选项
kill工具应符合《POSIX.1-2017》中的基础定义卷。
POSIX.1-2017的基础定义卷,第12.2节,实用程序语法指南,除了
在最后两种 SYNOPSIS 形式中,-signal_number 和
-signal_name选项通常多于一个字符。
应支持以下选项。 -l (字母ell.) 写出信号_name的所有值 的所有值,如果没有给出操作数 给出。如果给了一个exit_status操作数,并且它是一个 的值(见第2.5.2节,特殊参数)。 2.5.2节,特殊参数和等待),对应于一个被信号终止的进程。 进程被一个信号所终止,那么与该信号对应的 与终止进程的信号相对应的signal_name 应被写入该进程。如果一个exit_status操作数 并且它是一个信号号的无符号十进制整数值,则应写出与终止进程的信号相对应的signal_name。 的无符号十进制整数值,则应写出signal_name(不含SIG前缀的符号性常数名称),它是一个信号号。 不含SIG前缀的常量名称,定义在POSIX.NET的基础定义卷中。 基础定义卷中定义的不含SIG前缀的符号常量名)对应于该信号。 应被写入该信号。否则,其结果 是未指定的。 -s signal_name 指定要发送的信号,使用<signal.h>头中定义的一个符号性 头中定义的符号名称之一。信号名称的值 signal_name的值应被识别为与大小写无关的 的值应以不分大小写的方式被识别,不含SIG前缀。此外,还应识别 符号名称0应被识别,代表 信号值为零。相应的信号应被 发送,而不是SIGTERM。 -signal_name 相当于-s signal_name。 -signal_number 指定一个非负的十进制整数,signal_number。 代表要代替SIGTERM的信号。 作为有效调用kill()时的sig参数。 整数值与sig 值的对应关系在下面的列表中显示。 除了下面列出的之外,指定任何signal_number的效果都是未定义的。 以外的任何signal_number的效果都是未定义的。 0 0 1 SIGHUP 2 SIGINT 3 SIGQUIT 6 SIGABRT 9 SIGKILL 14 SIGALRM 15 SIGTERM 如果第一个参数是一个负整数,它将被解释为 将被解释为-signal_number选项,而不是指定进程组的负pid操作数。 负pid操作数,指定一个进程组。
操作数
应支持以下操作数。
pid 以下之一。 1. 一个十进制的整数,指定一个要发出信号的进程或进程组。 进程或进程组 pid操作数的正值、负值和零值所选择的进程。 pid操作数的正值和负值所选择的进程应与 kill()函数的描述。如果指定了进程编号为0。 当前进程组中的所有进程将被 信号。关于pid为负数的影响。 见POSIX.1-2017的系统接口卷中定义的kill()函数。 接口卷中定义。如果第一个pid 操作数为负数,应在其前面加上"--" 以防止它被解释为一个选项。 2. 一个工作控制的工作ID(见POSIX.1-2017的基础定义卷)。 见POSIX.1-2017的基础定义卷,第3.204节,工作控制 作业ID),它标识了一个背景进程组 要发出信号。作业控制作业ID的符号 只适用于在当前 shell 执行环境中对 kill 的调用。 当前 shell 执行环境中的 kill 的调用;见第 2.12, Shell执行环境。 exit_status 一个十进制的整数,指定一个信号编号或被信号终止的进程的 被信号终止的进程的退出状态。
STDIN
不使用。
输入文件
没有。
环境变量顶部
以下环境变量将影响到以下程序的杀死。
LANG 为国际化的变量提供一个默认值 变量的默认值。(见POSIX.1-2017的基础 参见POSIX.1-2017的基础定义卷,第8.2节。 国际化变量的优先级 国际化变量的优先级,请参阅POSIX.1-2017的基础定义卷,第8.2节,国际化变量,用于确定 的优先级)。 LC_ALL 如果设置为一个非空的字符串值,将覆盖所有其他国际化变量的值。 覆盖所有其他国际化变量的值。 LC_CTYPE 确定对文本数据的字节序列进行解释的区域划分。 确定将文本数据的字节序列解释为字符的地域性(例如,单字节与 例如,单字节而不是多字节的 字节)。 LC_MESSAGES 决定应使用哪种地区设置来影响 诊断信息的格式和内容写到 标准错误。 NLSPATH 确定消息目录的位置,用于 处理LC_MESSAGES的消息目录。
非同步事件
默认情况下。
STDOUT
当没有指定-l选项时,标准输出将不被使用。
不会被使用。
当-l选项被指定时,每个信号的符号名称 应以下列格式写入。 "%s%c", <signal_name>, <separator>. 其中<signal_name>是大写的,没有SIG前缀。 而<分隔符>应是<换行符>或<空格>。 对于最后写入的信号,<separator>应是<newline>。 当-l选项和exit_status操作数都被指定时。 相应信号的符号名称应以下列格式写入 以下格式写入。 "%s/n", <signal_name>.
STDERR
标准错误应仅用于诊断信息。
OUTPUT FILES
无。
扩展描述
无。
退出状态
应返回以下退出值。
0 为每个pid找到至少一个匹配的进程 操作数至少找到一个匹配的进程,并且指定的信号被成功地 至少为一个匹配进程成功处理了指定的信号。 >0 发生了一个错误。
错误的后果
Default
The following sections are informative.
应用范围
进程号可以通过使用ps找到。
工作控制的工作 ID 符号不需要像预期的那样工作 当 kill 在它自己的实用程序执行环境中运行时,不需要像预期的那样工作。 环境中运行时,不需要像预期的那样工作。在以下任一例子中。 nohup kill %1 & system("kill %1")。 kill 在不同的环境中运行并且不分享shell对工作编号的理解。
例子
任何一个命令。
kill -9 100 -165 kill -s kill 100 -165 kill -s KILL 100 -165 向进程ID为100的进程发送SIGKILL信号 和所有进程组ID为165的进程发送SIGKILL信号,前提是 进程有权限向指定的进程发送该信号。 的进程,并且它们存在。 POSIX.1-2017的系统接口卷和本卷的 POSIX.1-2017的系统接口卷和本卷不要求为任何 signal_names。 即使是-signal_number选项也为信号提供了象征性的 (尽管是数字)的信号名称。如果一个进程被一个信号终止了 的时候,它的退出状态会显示杀死它的信号。 但具体的数值并没有被指定。kill -l选项。 但是,可以用kill -l选项将十进制的信号号码和退出状态值映射到信号名称中。 状态值映射到一个信号的名称中。下面的例子 报告了一个被终止的作业的状态。 工作 stat=$? 如果 [ $stat -eq 0 ] 则 echo 工作成功完成。 elif [ $stat -gt 128 ] 则 echo 工作被信号SIG$(kill -l $stat)终止。 否则 echo 工作因错误代码$stat而终止。 fi 要向一个进程组(例如123)发送默认信号,一个应用程序应该使用类似以下的命令 应用程序应该使用类似于以下的命令。 kill -TERM -123 kill --123
理由是
-l选项起源于C语言的shell,并且在KornShell中也有实现。
在KornShell中实现。C shell的输出可以包括
因为在某些终端屏幕上,信号名称并不总是适合于
因为在某些终端屏幕上,信号名称并不总是适合在一行中出现。KornShell的输出
也包括实现定义的信号编号,并且被标准开发者认为太难了。
标准的开发者认为这对脚本来说太难了,无法方便地解析。
脚本方便地进行解析。指定的输出格式是
的目的不仅是为了适应历史上的C shell输出。
而且还允许在适合的系统上采用完全垂直或完全水平的
列表,这样做是合适的。
早期的建议是将SIGNULL这个名字作为一个信号名称,用来表示 信号0(由POSIX.1-2017的系统接口卷使用,用于 用于测试一个进程的存在而不向其发送信号)。 由于signal_name 0可以在这种情况下毫不含糊地使用。 SIGNULL已被删除。 早期的建议还要求符号性的signal_name在有无SIG前缀的情况下都要被识别。 无论是否有SIG前缀都能被识别。历史版本的 的历史版本没有为-l选项写入SIG前缀,也没有为 也不承认信号名的SIG前缀。 由于 应用的可移植性和易用性都不会因为要求这个扩展而得到改善,所以不再需要。 的可移植性和易用性,所以不再需要这个扩展。 为了避免初始负数参数的歧义 指定一个信号号或一个进程组。 POSIX.1-2008规定,在支持XSI选项的实现中,它总是被认为是前者。 支持XSI选项的实现,总是认为是前者。它还要求 符合要求的应用程序总是使用"--"选项 结束语,除非还指定了一个 选项被指定。 添加-s选项是为了回应国际上对以下问题的关注 提供某种形式的杀戮,以符合《实用语法指南》。 准则。 当kill在自己的系统中运行时,作业控制的作业ID符号不需要像预期的那样工作。 当kill在它自己的实用程序执行环境中运行时,作业控制的作业ID符号不需要像预期的那样工作。 环境中运行时,不需要使用作业控制作业ID符号。在以下任一例子中。 nohup kill %1 & system("kill %1")。 中,kill 在不同的环境中运行,并且不 理解shell是如何管理其工作编号的。
未来的方向
没有。
参见
第2章,外壳命令语言,ps(1p),wait(1p)
POSIX.1-2017的基础定义卷,第3.204节,Job 控制作业ID,第8章,环境变量,第12.2节。 实用程序语法指南, signal.h(0p) POSIX.1-2017的系统接口卷, kill(3p)
版权
本文部分内容是以电子版形式转载和复制的
本文部分内容以电子形式转载自IEEE Std 1003.1-2017, Standard for Information
技术标准–便携式操作系统接口(POSIX),The
Open Group Base Specifications Issue 7, 2018 Edition, Copyright
© 2018年由美国电气和电子工程师协会和开放集团版权所有。
工程师协会和开放集团版权所有。 如果此版本与
本版本与原始的IEEE和The Open Group标准之间存在差异。
如果本版本与原始的IEEE和开放集团标准之间有任何差异,原始的IEEE和开放集团标准是裁判文件。
标准是裁判文件。原始标准可在以下网址获得
在线获取:http://www.opengroup.org/unix/online.html 。
本页中出现的任何印刷或格式上的错误 很可能是在将源文件转换为手册格式的过程中出现的。 源文件转换为手册格式时出现的。要报告这些错误,请参见 https://www.kernel.org/doc/man-pages/reporting_bugs.html 。