我尝试通过pid文件终止进程:
kill -9 $(cat /var/run/myProcess.pid)
pid文件包含进程号。但是执行kill不会给我带来任何标准输出并且进程仍然存在。但这有效:
kill -9 PID
第一个kill命令有什么问题?它是否无法从文件中提取PID?
pid文件的示例内容:
5424
和
kill -9 5424
作品。
答案 0 :(得分:61)
我相信你遇到了这个问题,因为你的默认shell是dash(debian almquist shell),但你使用的是bash语法。您可以使用类似
之类的内容在shebang行中指定bash#!/usr/bin/env bash
或者,您可以在评论
中使用admdrew建议的破折号和bash兼容后退表达式kill -9 `cat /var/run/myProcess.pid`
无论如何,你不能依赖/bin/sh
作为bash。
答案 1 :(得分:40)
在某些情况下,更紧凑:
pkill -F /var/run/myProcess.pid
是要走的路。我对这些品种遇到了麻烦:
kill $(cat /var/run/myProcess.pid)
# Or
kill `cat /var/run/myProcess.pid`
当我不得不将命令放入可能使用不同规则解析它的其他内容时,如Monit对其启动/停止命令执行的操作。
答案 2 :(得分:1)
cat /var/run/myProcess.pid | sudo xargs kill -9
答案 3 :(得分:0)
方法很简单。
fuser -k /path/filename
示例假设您想在 linux 中杀死 apt 锁定文件。
sudo fuser -k /var/lib/dpkg/lock
它会杀死保存文件的进程。