2

我正在尝试编写一个终止进程的 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
4

0 回答 0