私のスクリプトはプロセス名を入力として受け入れて終了します。 pgrepを使ってみましたが、2つのPIDが返されました。 1つは実行中のプロセス用で、もう1つはプロセス名を入力として受け入れるスクリプト用なので、詰まっています!私もそのオプションを試しましたが、pgrep
-fo
それも役に立ちませんでした。どんなアドバイスでも役に立ちます。これは私のスクリプトです。
#!/bin/bash
ProcessName=$1
pID= pgrep -fl $ProcessName
echo $pID
したがって、スクリプトを呼び出すと2つのPIDが返されます。
bash-3.00$ ./dynamic_values.sh test-Process
10534 /xxx/xxo/xxx/xxe --run --propFile /application/test/test-Process_Archive.tra --innerProcess
23401 /bin/bash ./dynamic_values.sh test-Process
私は10534を期待していましたが、スクリプトもインポートします。 OSバージョンの場合:
bash-3.00$ uname -a
Linux xxxxxx 2.6.9-67.0.1.
ベストアンサー1
数週間前でも同じ問題を解決する必要がありました。pgrep
また、pkill
拡張正規表現をサポートしているので、正しい正規表現を取得するのは簡単です。
以下は私が使用したスクリプトと正規表現です。
#!/bin/bash
ProcessName=$1
pID= pgrep -fl "^(/.*)?${ProcessName}\s"
echo $pID
(Calebが提案したように)使用する方が良いですpkill
。
pkill -fl "^(/.*)?${ProcessName}\s"
ユースケースとプログラムのパフォーマンスに必要な結果を得るには、正規表現を調整する必要があります。
もしあればはい実際、その名前で実行されているいくつかのプロセスはもちろん終了します。これを避けたい場合は、-o
ただキルを使用してください。最も古いプロセスを一致させるか、-n
単に終了します。最新情報。 1つだけが必要ですが、最も古いものでも最新でもない場合は、使用しないでくださいp(kill|grep)
。