【问题标题】:How do I stop a process running using Perl? [closed]如何停止使用 Perl 运行的进程? [关闭]
【发布时间】:2010-06-27 23:08:17
【问题描述】:

我想编写一个 Perl 代码来结束我在 Linux 上运行的另一个程序的进程。

例如,我执行xxy.py 并为其打开一个进程。我想用Perl关闭xxy.py的进程。我需要做什么?

【问题讨论】:

    标签: linux perl process


    【解决方案1】:

    Perl 扩展名通常是 .pl 或 .pm 对吗? .py 是我认为的 python。

    无论如何,你可以在 Unix 环境中杀死一个指定的程序,比如:

    system 'killall', 'some_program_name';
    

    system 'kill', '-15', $pid;
    

    如果变量 $pid 包含您的程序的 pid。

    【讨论】:

    • 一个更好的写法是system 'kill', '-9', $pid;。这将避免通过外壳
    • 此外,您可能应该避免使用-9 (SIGKILL),因为它不会给您正在杀死的进程提供任何自我清理的机会。 SIGTERM(通常是-15)更好。
    • 你是对的。我将编辑我的帖子以反映这一点。我只是习惯于用 9 杀死无响应的程序。
    • perl 有一个 kill 内置函数;使用它而不是外部程序...
    【解决方案2】:

    使用 killall 按进程名称杀死进程。如果您必须使用 perl。从那里进行系统调用。

    【讨论】:

    • 谁能解释一下这里的负面影响?
    • 不是反对者,但也许是因为只有 FreeBSD 风格的 killall 关心给定的名称。 SysV 风格的killall 更直接,会尝试杀死所有 进程。 (或者,鉴于这是如此,它们可能只是随机的驱动式投票......)
    • 感谢戴夫。你猜对了。我来自freebsd 背景。不知道 killall 不一样。如果我使用 linux 系统,肯定会尝试 killall。听起来很疯狂的功能。好消息是有人对我的反对票表示同情:)
    【解决方案3】:

    请参阅 kill(1)pkill(1) 手册页。

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多