Linux使用kill命令的注意事项介绍

在linux系统中,kill命令以其直接且强力的终止进程功能而闻名。为了避免误操作,本文将详细介绍使用kill命令时需要注意的事项。

Linux使用kill命令的注意事项介绍

使用kill命令的注意事项

  1. 在调试脚本Bug时,你可能会注意到killall命令与kill命令的一个关键区别。假设有一个脚本test.pl,内容如下:

    #!/usr/bin/perl -w
    sleep 60;

    登录后复制

    测试结果如下:

    • 如果通过/home/MNET/m_yancyliu/tmp/x.pl命令启动,此时ps命令显示的命令行为: /usr/bin/perl -w /home/MNET/m_yancyliu/tmp/x.pl

      结果如下:

      • killall x.pl命令可以终止该脚本。
      • killall perl命令则无法终止该进程。
    • 如果通过/usr/bin/perl -w /home/MNET/m_yancyliu/tmp/x.pl命令启动,此时ps命令显示的命令行为: /usr/bin/perl -w /home/MNET/m_yancyliu/tmp/x.pl

      结果如下:

      • killall perl命令可以终止该进程。
      • killall x.pl命令则无法终止该进程。

    此时,如果使用ps uxfww命令查看对应的进程树,会发现两种启动方式的进程树是一样的:

    (如果要查看所有进程的进程树,可以使用命令 `ps axfww`)
    -eash | \_ /bin/bash | \_ /usr/bin/perl -w /home/MNET/m_yancyliu/tmp/test.pl

    登录后复制

    上述结果表明,尽管通过ps -ef命令看到的命令行显示相同,但操作系统仍然会记录该进程的启动信息。

    • 当直接通过脚本名调用时,操作系统认为进程对应的程序名就是脚本名,因为进程是通过脚本名启动的。
    • 当通过perl或shell加载脚本名的方式调用时,操作系统认为进程的程序名称是perl/shell,而脚本名则作为进程的参数传入,因为此时进程是通过perl/shell启动的。

    操作系统是如何区分这两种方式的呢?我们可以通过比较两种启动方式下的/proc/$pid目录来理解:

    • 直接通过脚本名调用时,/proc/$pid目录下内容如下:

      • cmdline文件内容为:usr/bin/perl -w /home/MNET/m_yancyliu/tmp/test.pl
      • stat文件内容为:
        12242 (test.pl) S 3102 12242 3102 9472041 12242 8396800 456 0 3 0 0 0 0 0 18 0 1 0 357357658 4358144 361 4294967295 134512640 135656772 3215679088 3215678100 3084573003 0 0 128 0 3741425540 0 0 17 3 0 0

        登录后复制

    • 通过perl加载脚本名时,/proc/$pid目录下内容如下:

      • cmdline文件内容为:usr/bin/perl -w /home/MNET/m_yancyliu/tmp/test.pl
      • stat文件内容为:
        13372 (perl) S 3102 13372 3102 9472041 13372 8396800 460 0 0 0 0 0 0 0 18 0 1 0 357376374 4358144 362 4294967295 134512640 135656772 3218100000 3218099012 3084704075 0 0 128 0 3577044868 0 0 17 2 0 0

        登录后复制

    显然,我们通过ps命令看到的进程统计信息与/proc/$pid/cmdline中看到的一致。而在进程的CPU统计信息/proc/$pid/stat中看到的内容则不同,这里标识了操作系统认可的程序名称,即进程是如何启动的。第一个数字均为进程ID。

    因此,根据进程的CPU活动统计信息,killall命令能够区分两种不同的方式启动的进程,从而做出不同的处理。在使用killall命令时要注意,在使用命令行启动进程时也要注意这些差异。

以上就是Linux使用kill命令的注意事项介绍,更多精彩内容继续关注系统部落官网。

路由网(www.lu-you.com)其它相关文章!

未经允许不得转载:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权!路由网 » Linux使用kill命令的注意事项介绍