しばらく前、先生から、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)
これにより、すべてのプロセスの名前が出力されます。
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
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