これが私のシェルスクリプトです:
#!/bin/bash
PIDS=$(ps -e | grep $1 |grep -v grep| awk '{print $1}')
kill -s SIGINT $PIDS
echo "Done sendings signal"
コマンドライン引数としてプロセスの名前を渡しています。
ターゲットプロセスは実際に SIGINT シグナルを受信して終了していますが、echo コマンドは実行されません。
助言がありますか?
更新:
コードを次のように変更しました。
#!/bin/bash
PIDS=$(ps -e |grep $1 | grep -v grep | awk '{print $1}'|grep -v $$)
echo $PIDS
kill -s SIGINT $PIDS
echo "Done sendings signal"
echo "The current process is $$"
ここで、奇妙なことに気付きました
。スクリプトは機能していますが、期待どおりではありません。スクリプトの外側のコマンド ラインで次のコマンド
ps -e|grep process-name|grep -v grep|awk '{print $1}'|grep -v $$
を実行すると、プロセス名の pid が得られますが、シェル スクリプト内で同じコマンドを実行すると、それを変数 PIDS に割り当ててから PIDS をエコーすると、プロセスの pid に加えてもう 1 つの pid が表示されます。名前。したがって、kill コマンドを実行すると、2 番目の pid を持つプロセスが存在しないというエラーが発生します。端末の残りの文をエコーします。どんな手掛かり ?