我正在尝试编写一个终止进程的 shell 脚本。进程的 pid 存储在一个名为foobar.pid
. BSD pkill 有一个选项 -F,它接受一个 pidfile 并杀死匹配的进程。完美的!
所以我的脚本中有这一行:
pkill -F foobar.pid # doesn't work
但它不起作用。如果我手动输入命令,它可以工作。是什么赋予了?更长,但据我所知,在脚本中有效的替代方案:
pid=$(cat foobar.pid)
kill $pid # works
现在证明问题不在于:
- 脚本无法读取 pidfile
- 不允许脚本终止进程。
我还尝试将 shebang 更改为#!/bin/bash
,以防sh
会踢出一些奇怪的兼容模式或其他东西。没运气。
系统规格:
$ uname -a
Darwin Babar.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64
$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
完整脚本:
#!/bin/sh
pid=$(cat foobar.pid)
kill $pid # works
# pkill -F foobar.pid # doesn't work
rm foobar.pid