[kill -s SIGUSR1] このスクリプト内では動作しませんが、コマンドラインで動作するのはなぜですか? (Re:誤った信号仕様)

[kill -s SIGUSR1] このスクリプト内では動作しませんが、コマンドラインで動作するのはなぜですか? (Re:誤った信号仕様)

SIGUSR1をプロセスに送信するためのコマンドラインオプションを含むシェルスクリプト(/ bin / sh)を作成しようとしています。

my_command() {
        printf "Sending SIGUSR1: "
        kill -s SIGUSR1 `pidof my_process`
        [ $? = 0 ] && echo "OK" || echo "FAIL"
}

しかし失敗します。

/etc/init.d# ./S40test my_command
Sending SIGUSR1: ./S40test: line 39: kill: SIGUSR1: invalid signal specification
FAIL

ただし、コマンドラインからコマンドを実行すると、次のようになります。

kill -s SIGUSR1 `pidof my_process`

...それでうまくいきます。

また、実際のプロセス番号を使用するようにpidof my_processを変更しましたが、まだ機能しません。

答え1

使用kill -s USR1 <pid>またはkill -USR1 <pid>交換してください。

POSIXによると仕様、電子は標準形式です。

-s signal_name
ヘッダーで定義されているシンボル名の1つを使用して送信する信号を指定します<signal.h>。 signal_nameの値は大文字と小文字が独立した方法で認識されなければなりません。SIGプレフィックスなし
...
-signal_name
[XSI]と同じです-s signal_name

しかし、後者はほとんど普遍的にサポートされています(例えば、非ポジスシェルでもcsh)。

一部のシェルだけが組み込み機能以外の非標準形式をサポートしています。特に(kill -s SIGFOODebianとUbuntuでスクリプトを実行する場合)、サポートされていません。kill -s FOOkilldash/bin/sh

関連情報