【问题标题】:Kill process by pid file通过pid文件杀死进程
【发布时间】:2014-11-24 06:29:27
【问题描述】:

我尝试通过 pid 文件杀死一个进程:

kill -9 $(cat /var/run/myProcess.pid)

pid 文件包含进程号。但是执行 kill 没有给我标准输出,并且进程仍然存在。但这有效:

kill -9 PID

第一个 kill 命令有什么问题?是否无法从文件中提取PID?

pid文件的示例内容:

5424

kill -9 5424

有效。

【问题讨论】:

  • 我猜,但试试cat /var/run/myProcess.pid | xargs kill -9;我的假设是您在 pid 文件中有尾随空格。
  • @ElliottFrisch 是的,它打印 5424。
  • @artworkadshi kill -9 `cat /var/run/myProcess.pid` 有效吗? (必须弄清楚如何在反引号内打印反引号,呵呵)
  • @admdrew 这行得通,你能解释一下区别在哪里吗?
  • @artworkadshi 你的/bin/sh bash,还是破折号?

标签: linux


【解决方案1】:

有很简单的方法。

fuser -k /path/filename

例如,假设您想在 linux 中杀死 apt 锁定文件。

sudo fuser -k /var/lib/dpkg/lock

它会杀死持有该文件的进程。

【讨论】:

    【解决方案2】:
    cat /var/run/myProcess.pid | sudo xargs kill -9
    

    【讨论】:

    • 虽然这可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    【解决方案3】:

    在某些情况下,更紧凑:

    pkill -F /var/run/myProcess.pid
    

    是要走的路。我遇到了品种问题:

    kill $(cat /var/run/myProcess.pid)
    # Or
    kill `cat /var/run/myProcess.pid`
    

    当我不得不将命令放入其他可能使用不同规则解析它的东西时,例如 Monit 对其启动/停止命令所做的。

    【讨论】:

      【解决方案4】:

      我相信您会遇到这种情况,因为您的默认 shell 是 dash(debian almquist shell),但您使用的是 bash 语法。您可以在 shebang 行中指定 bash,例如,

      #!/usr/bin/env bash
      

      或者,您可以在 cmets 中使用 admdrew 建议的 dash 和 bash 兼容的反引号

      kill -9 `cat /var/run/myProcess.pid`
      

      无论如何,你不能依赖 /bin/sh 来 bash。

      【讨论】:

        猜你喜欢
        • 2020-03-02
        • 2021-11-29
        • 1970-01-01
        • 2013-11-12
        • 2020-01-07
        • 2015-12-31
        • 2014-08-30
        • 2017-08-04
        • 2016-03-16
        相关资源
        最近更新 更多