web-dev-qa-db-ja.com

Mac lsofコマンドは、すべてのユーザーのすべてのプロセスを検索します

しばらく前、先生から、Minecraftが登場したときにいつでも殺すスクリプトを作成するように頼まれました。ユーザー自身が実行したときに機能しましたが、ルートレベルの場合は機能しませんでした。

Lsofを呼び出したユーザーによるプロセスだけでなく、すべてのプロセスを検出するlsofに似たコマンドはありますか?マニュアルページを読みましたが、よくわかりません。ユーザーだけでなく、すべてのプロセスを取得するlsofコマンドはありますか?

これはMac専用に設計されたスクリプトです。

#!/usr/bin/env python
import os
from time import sleep

while True:
    os.system("lsof | grep minecraft | cut -c 11-16 >mine.txt")
    f=open("mine.txt")
    l = f.readline()
    if len(l) > 0:
        os.system("kill "+l)
    f.close()
    os.system("echo > mine.txt")
    sleep(15)
2
Hovestar

これにより、すべてのプロセスの名前が出力されます。

ps -axco comm | sed 1d
  • -a:すべてのユーザー(ユーザーとして実行する場合はroot、rootとして実行する場合はuserなど)
  • -x:制御端末のないプロセスを含める
  • -o comm:コマンド列のみを出力します
  • -c:コマンド列のパスの代わりにコマンド名を使用する
  • sed 1d:最初の行を削除します(COMM

Minecraftを終了するだけの場合は、次のようなシェルスクリプトを実行できます(または単にkillall minecraft with launchdまたはcron ):

while sleep 5; do killall minecraft 2> /dev/null; done
2
Lri

lsofを呼び出したユーザーによるプロセスだけでなく、すべてのプロセスをスキャンするlsofに似たコマンド

pgrep -f minecraft

ここで、minecraftは検索するプロセスです。このコマンドは、PIDのリストを返します。

これがkillコマンド(シェル構文)です:

kill $(pgrep -f minecraft)

Pythonを使用する代わりに、これを実現するための簡単なシェルコマンドを次に示します。

while true; do echo kill $(pgrep -f minecraft) 2> /dev/null; sleep 15; done
1
kenorb