1

したがって、次のようなリストを同時に実行する複数の画面を持つシステムがあります。

    2606.molamola19 (Detached)
    13481.johnappy1 (Detached)
    26017.Dylkill   (Detached)
    17061.legoman993        (Detached)
    15984.legoman993        (Detached)
    7418.taytotayto (Detached)
    7336.wpgradford (Detached)
    11913.twbone    (Detached)
    31947.1christiant       (Detached)
    20124.legoman993        (Detached)
    15034.PWNman567 (Detached)
    13119.johnappy1 (Detached)
    21084.legoman993        (Detached)
    9294.Ncraven00  (Detached)
    17200.A_Naked_Equinox   (Detached)
    4331.somegreatvids999   (Detached)
    18849.Djfireblade       (Detached)
    1104.AlfieW5    (Detached)
    7926.superhoi   (Detached)
    27904.ty281998123a      (Detached)
    14870.johnappy1 (Detached)
    4340.stapler12  (Detached)
    21244.oas510    (Detached)
    21032.jaater    (Detached)
    14320.johnappy1 (Detached)
    15188.sammyboy40        (Detached)

クライアントへの接続の問題により、次のような同じ画面の複数のインスタンスが開始されることがあります。

    14320.johnappy1 (Detached)
    14870.johnappy1 (Detached)

過去数日間、Bash を学習して、1 つ以上のプロセスを強制終了する方法を見つけようとしました (2 つ目のプロセスまたは 3 つ目のプロセスが作成されると、とにかく最初のインスタンスが破棄されます)。

どんな助けでも驚くほど感謝しています!

私が示した出力は screen -r で生成されました

4

1 に答える 1

1

編集:説明を追加し、コマンドを変更しました(Jeremy Sayersのコメントを参照)

screen を使用してから長い時間が経ちましたが、まだ正しいヒントを提供できると思います。最初にそれらのインスタンスを除外し、それらを殺してから殺します:

screen -r | \
  sort -t. -k2,2 -k1,1 | \
  awk 'BEGIN { i=""; FS = "([[:space:]]|\\.)+" };{if($2 == i) print $1; i = $2;}' | \
  while read x; do kill -9 $x; done

説明:

sort -t. -k2,2 -k1,1

最初に名前 (johnappy1 など) の後に並べ替え、次に PID の後に並べ替えます (最初のインスタンスを開始したままにしておく必要があるため)。

awk 'BEGIN { i=""; FS = "([[:space:]]|\\.)+" };{if($2 == i) print $1; i = $2;}'

複数のインスタンスをすべて除外し、より高い PID を出力します (最初の最も低い PID のみを省略します)。

while read x; do kill -9 $x; done

前のコマンドから取得したすべての PID をループし、それらに対して「kill -9」を呼び出します。

于 2012-12-01T19:35:25.703 に答える