3

モジュールの開始と停止を制御するシェル スクリプトを作成しました。停止コマンドの結果が予期しないものになるまで、すべてが正常に見えます。

コマンドを使用してkill -s SIGKILL -- -gpid、プロセスのグループを強制終了します。を使用して、/bin/shこのようなコマンドを実行します

/bin/sh -c "kill -s SIGKILL -- -gpid"

エラーを返した

/bin/sh: 0行目: kill: SIGKILL: 無効なシグナル指定

/bin/sh次に、をに置き換えた/bin/bashので、コマンドは

/bin/bash -c "kill -s SIGKILL -- -gpid"

エラーは何も返されませんでした。したがって、bash と sh の違いが結果の原因であるという説明を結論付けます。ただし、を調べls/bin/shところ、/bin/shは へのシンボリック リンク/bin/bashであるため、コマンドは同じである必要があります。

コマンド構文kill -s SIGKILLが推奨される構文にないことがわかりましたkill -s KILL

だから私はSIGKILLをKILLに置き換えました、コマンドは

/bin/sh -c "kill -s KILL -- -gpid"

エラーは何も返されませんでした。上記のように、誰でもこのケースを説明できます。

4

3 に答える 3

3

bashが呼び出されるとsh(たとえば、あなたの場合のようにシンボリックリンクを介して)、shほとんどの最新機能がオフになっている互換モードが使用されます。shの外部バイナリを呼び出しているに違いありませkillんが、それは を認識しませんSIGKILLが、bash 呼び出しはそのビルトインを使用しており、そのビルトインは使用しています。

于 2013-05-07T17:39:35.283 に答える
2

それはすべてbash の互換性に関するものです。SIGINTやその他の機能を認識できない/bin/bashため、使用するクイックフィックス。sh

于 2013-12-23T10:06:53.297 に答える