2

プロセスを終了するシェル スクリプトを作成しようとしています。プロセスの 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
4

0 に答える 0