linux中kill命令

2022/1/8 7:04:46

本文主要是介绍linux中kill命令,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在服务器上通过运行模型的时候,时常会遇到两种问题:

  1. 模型太大需要的运行时间久,而电脑又不可以一直保持在开机状态,就算保持在开机状态也保不准哪一下会关掉导致重跑
  2. 在服务器上不间断训练时,发现自己的参数设置有误,需要将之前的训练断开,而不知道如何停止目前的训练

问题一的解决方法
解决这个问题的方法是可以通过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 。


这篇关于linux中kill命令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程