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 SIGFOO
DebianとUbuntuでスクリプトを実行する場合)、サポートされていません。kill -s FOO
kill
dash
/bin/sh