プロセスを終了するシェル スクリプトを作成しようとしています。プロセスの pid は というファイルに保存されますfoobar.pid
。BSD pkill にはオプション -F があり、これは pidfile を取り、一致するプロセスを強制終了します。完全!
したがって、スクリプトに次の行があります。
pkill -F foobar.pid # doesn't work
しかし、うまくいきません。コマンドを手動で入力すると、機能します。何を与える?長くなりますが、私の理解では、スクリプトで機能する代替手段は次のとおりです。
pid=$(cat foobar.pid)
kill $pid # works
これで、問題が次のようなものではないことが証明されました。
- スクリプトが pidfile を読み取れない
- スクリプトがプロセスを強制終了することは許可されていません。
また、シバンを に変更してみました。これは、奇妙な互換モードなどを開始#!/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