3つの異なるアプリケーションが異なる場所に同じファイル名を持っています。そのうちの1つをフルネームでどのように削除できますか?

3つの異なるアプリケーションが異なる場所に同じファイル名を持っています。そのうちの1つをフルネームでどのように削除できますか?

異なるパスで同じファイル名を持つ3つのアプリケーションを実行しています。

$ ~/app1/main

$ ~/app2/main

$ ~/app3/main

実行可能ファイルのフルネームを受け入れてアプリケーションを終了するbashスクリプトを作成したいと思います。

 $ ./my_killer.sh /home/me/app2/main

どうすればいいですか?具体的には、フルネームでアプリを終了する方法は?

ベストアンサー1

Linuxのサポートのみが必要な場合(あなたの質問がlinuxでタグ付けされているようです)、シンボリックリンクを使用できます/proc/%d/exe

これはこれを行うスクリプトの例です。

#!/bin/bash

if [ "$#" != 1 ] || [ "$1" = "" ]
then
    echo "Usage: $0 <full-exe-path>" 1>&2
    exit 1
fi

shopt -s extglob
cd /proc

for PID in [1-9]*([0-9])
do
    if [ "$(readlink "$PID"/exe)" = "$1" ]
    then
        kill "$PID"
    fi
done

1つの注意点は、プロセスIDがカーネルスレッドであるか、あなたに属していない場合にreadlink失敗し、空の"$(readlink "$PID"/exe)"文字列として評価されることです。これらすべてのプロセスを終了しようとすることを避けるために、$1スクリプトは空の文字列の場合は何も拒否します。

また、このスクリプトはextglobディレクトリの一致を許可する形式を使用することに注意してください。[1-9]*([0-9])つまり、間隔の1文字1-9の後には、間隔の文字数に制限はありません0-9

おすすめ記事