Cygwin でシェル スクリプトを実行しようとしていますが、変数をサブシェルに渡すのに問題があります !!
実際にプロセスの PID を取得する非常に単純なスクリプトがあり、そこからスクリプト内からプロセスを強制終了したいと考えています。
# my_proc_kill.sh
#
export c=$(ps -W | grep -ir behave | sed 's/\([0-9]\+\).*/\1/')
echo $c
#1
/bin/kill -f $c
#2
sh -c '/bin/kill -f ${c}' "$c"
#3
sh -c '/bin/kill -f $@' _ "$c"
#4
e=$(taskkill /PID $c)
私はプロセスを4つの異なる方法で強制終了しようとしましたが、どれもうまくいきませんでした!
(#1) と (#4) は、Cygwin ターミナル内で直接呼び出すと問題なく動作するのに、「my_proc_kill.sh」を実行するとうまく動作しない理由がわかりません。
私が気付いたもう1つのことは、(#4)の場合、「$c」を実際のプロセス番号に置き換えてから「my_proc_kill.sh」を実行すると、それが機能することです。つまり、変数値「$c」が「taskkill」に渡されていないようです!! taskkill が変数 "$c" を認識できるように、コードを変更するにはどうすればよいですか?!?
しかし、そのプロセスIDにアクセスしているシェルに関係なく、プロセスを強制終了していない限り、特定のプロセスのPIDを修正すべきではありませんか?
これを回避する方法を教えてください。
スクリプトを実行すると、次のエラー メッセージが表示されます。
5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid: 5040
kill: illegal pid:
ERROR: Invalid query
「kill」がこれを違法なpidと見なすのはなぜですか? しかし、Cygwin ターミナルで同じ PID 番号 (この場合は 5040) を使用すると、機能しますか? (以下は大丈夫です)
$/bin/kill -f 5040
これを解決する方法はありますか?
前もって感謝します。