/tmpを除き、 "killall"と一緒にワイルドカードを使用することはできません。

/tmpを除き、

/tmp/bash.sh以下を含むスクリプトがあります。

killall name*

/tmpフォルダに行って実行すると正常に動作しますが、それ以外の場合は動作./bash.sh/ません。むしろ文句を言う/tmp/bash.sh./tmp/bash.sh

name*: no process found

なぜ?この問題をどのように解決しますか?

ベストアンサー1

このkillallユーティリティはパターンを使用せず、シグナルを送信する1つ以上のプロセス名のリストが必要です。

killall name*シェルが引用符で囲まれていないファイル名のワイルドカードパターンを、パターンと一致する現在のディレクトリのすべてのファイル名に拡張すると言うとname*どうなりますか?

/tmpこのパターンに一致し、終了したいプロセスに対応するファイル名があるようです。

一致するファイル名がない場合、/システムのディレクトリに一致するファイル名がないように見えるように、シェルはパターンを拡張しません。ユーティリティkillallは呼び出されたプロセスを見つけることができず、name*あなたが質問に報告した方法でこれについて不平を言います。


期待どおりに機能するユーティリティを見つけるには、このpkillユーティリティを検討してください。それであなたはできます拡張正規表現名前を合わせてみてください。

次のコードは、TERM名前が次の文字で始まるすべてのプロセスにシグナルを送信しますname(このパターンは通常引用符で囲む必要があります)。

pkill '^name'

名前がname正確に一致するプロセスにシグナルを送信します。

pkill '^name$'

またはより良い、

pkill -x name

プロセスに提供された引数も考慮するには、たとえば、とともに-fオプションを使用し、次のように入力して開始したコマンドを終了します。pkillcatcat myfile

pkill -f -x 'cat myfile'

pkillマニュアル()も参照してくださいman pkill

おすすめ記事