2016-07-20 5 views
0

私は、tcshシェルのプロセスに関連するPIDのリストを削除したいと思います。私は次のコマンドを実行しました:Unix:lsofコマンドに基づいてプロセスのリスト(PID)を削除するには?

> losf <file> | awk '{print($2)"' 

このコマンドは、PIDのリストを表示します。

PID1

PID2

...

私はその後、それらのPIDを殺すために、次のコマンドを実行しました。 killコマンドを実行すると

> kill -9 `lsof <file> | awk'{print($2)}'` 

、端末はちょうど何とか任意のPIDを殺すことなく絞首刑。私はその後、それらのPIDを1つずつ殺すことに戻らなければならなかった。

したがって、上記のように意図したことを行う方法はありますか?ありがとうございました。

答えて

2

xargsがstandar入力から読み込み、与えられた各ライン上でアクションを実行するための標準的なユーティリティです-SIGNALオプションを使用して、たとえばTERMにそれを変更することができます。

> lsof <file> | awk 'print {$2}' | xargs -I '{}' kill {} 
+0

このソリューションをありがとう、この1つのライナーは私のために働いている、それは私が探しているものです。元の答えに構文エラーがあるので、私はあなたの答えを編集しました。 'オリジナル:awk 'print {$ 2}' ' '編集:awk' {print($ 2)} '' – user3531168

0

たぶん、あなたは for i in (lsof <file>); echo "pkill"$i を試みることができるか、また、私は仕事と任意の希望を持っていないよけれども lsof <file> > pkillようsometihng試みることができる。..

+0

ありがとうございますが、私は "for"コマンドを持たないtcshシェルを使っていますので、これを試してみることはできませんでした。私は代わりにforeachコマンドを使用しました。 – user3531168

0

私は次のforeachメソッドを使用していることを解決するために管理:

> foreach id (`lsof <file> | awk '{print($2)"'`) 
foreach? kill -9 $id 
foreach? end 

私はこのような使用のためのスクリプトを記述することなく、これを行うには良い方法があるかどうかはわかりません。

0

fuserコマンドがありますか。
オプション-kは、指定されたファイル/ファイルが開いているすべてのプロセスを強制終了します。デフォルトKILLによって

fuser -k -TERM /home/rolf/fs3/fs3.db /home/rolf/fs2.db 
/home/rolf/fs3/fs3.db: 4026 4058 
/home/rolf/fs2.db: 3996 

送信されていますが

関連する問題