特定のポートでプロセスを終了するスクリプトの作成

特定のポートでプロセスを終了するスクリプトの作成

可能な限り移植できるように、特定のポートのプロセスを終了するシェルスクリプト(「POSIX」)を作成したいと思います。私はこれを使用できることを知っています。

portpid() { fstat | grep ":$1" | awk '{print $3}' ;}

その後、次のようにポート8080でリッスンしているプロセスを終了できます。

$ kill $(portpid 8080)

しかし、これをonelinerのポートプロセスを終了するプログラムに結合し、このスクリプトを私のコマンドとパスに名前付きエイリアスとして追加するにはどうすればよいですか?

私の考えでは、以下のようになるはずです。

portpid() { fstat | grep ":$1" | awk '{print $3}' ;}

kill $(portpid $1)

これを合わせようとしましたが、うまくいきません。

#!/bin/bash
portpid() { fstat | grep ":$1" | awk '{print $3}' ;}    
kill $(portpid $1) 

私はコーエンシェルを使用しています。これは私の最初のシェルスクリプトです。

ベストアンサー1

「うまくいきません」という言葉を聞いたり読んだりするのが一般的ですが、ほとんど役に立たない。

korn シェルを使用するのと同じように、 bash(#!/bin/bash ) に shebang を使用します。システムに少なくとも/bin/bashがありますか?この小さなスクリプトでは/bin/kshを使用することもできます。

あなたがすることは次に拡張されます。 (80番に電話してください)

#!/bin/bash
portpid() { fstat | grep ":80" | awk '{print $3}' ;}    
kill $(portpid 80) 

あなたが望むものではありませんか?

fstat給餌使用kill結果

portpid() { fstat | grep ":$1" | awk '{print $3;}' | xargs kill }

ここで xargs は前のコマンドの入力を読み込み、kill を呼び出します。

awk は、以下を使用する代わりに greping を実行できます。

portpid() { fstat |  awk '/'$1'/ {print $3;}' | xargs kill }

ポート番号が特定のフィールド(例:7)にある場合は、awk構文を理解しているようです。

portpid() { fstat |  awk '$7 ~ /'$1'/ {print $3;}' | xargs kill }

おすすめ記事