Mac lsof komutu tüm kullanıcılar için tüm işlemleri bulur


2

Bir süre önce öğretmenim benden Minecraft'ı öldürecek bir senaryo oluşturmamı istedi. Kullanıcı kendi çalıştırdığı zaman çalıştı, ancak root seviyesinde ise çalışmadı.

lsofSadece lsof denilen kullanıcı tarafından değil, tüm işlemleri bulduğuna benzer bir komut var mı ? Adam sayfasını okudum, ama tam olarak anlamadım. lsofSadece kullanıcıların değil, her bir işlemi gerçekleştirecek bir komut var mı ?

Bu, yalnızca Mac'ler için tasarlanmış komut dosyasıdır:

#!/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)

Hey, ellerimi o senaryoyu alabilir miyim? Kullanabilirim. Ayrıca, kaynak kodunun iyi olması için yeteneklerini genişletmek istiyorum.
Griffin

1
@Griffin Tabii Soruyu düzenleyeceğim. Bu oldukça basit.
Hovestar

Aslında bu daha iyi bir fikir. Onlara kaynağın gösterilmesi, neyin değiştirileceğini daha iyi anlamalarını sağlayabilir. Ne yazık ki yardım edemem çünkü bilmem ama bunu yapan başkaları yararlı bulabilir.
Griffin

1
neden kullanıyorsunuz lsof? açık dosyaları listelemek için tasarlanmıştır. Bunun gibi bir şey kullanmanın daha iyi olacağını düşünüyorum ps. ve tüm kullanıcıların işlemlerini listeleme gelince ... eğer bellek çalışırsa, bu olası bir güvenlik sorunu olduğu için bu mümkün değil
nc4pk

Me hiçbir bilgi piton :( C ++ da nasıl yaptığını.
Griffin

Yanıtlar:


2

Bu, tüm işlemlerin adlarını yazdırır:

ps -axco comm | sed 1d
  • -a: tüm kullanıcılar (kullanıcı olarak çalıştırıldığında root ve root olarak çalıştırıldığında user gibi)
  • -x: kontrol terminali olmayan işlemleri dahil etmek
  • -o comm: yalnızca komut sütununu gösterir
  • -c: komut sütununda yollar yerine komut isimlerini kullan
  • sed 1d: ilk satırı sil ( COMM)

Yalnızca Minecraft çıkmak istiyorsanız, (ya da sadece böyle bir shell script çalıştırabilir killall minecraftile launchd veya cron ):

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

1

Buna benzer bir komut lsof, yalnızca arayan kullanıcı tarafından değil, tüm işlemleri taramak için kullanılır .lsof

pgrep -f minecraft

Bulunacak minecraftişlem nerede . Komut, PID'lerin listesini döndürür.

İşte kill komutu (kabuk sözdizimi):

kill $(pgrep -f minecraft)

Python kullanmak yerine, aynı şeyi elde etmek için basit bir kabuk komutu:

while true; do echo kill $(pgrep -f minecraft) 2> /dev/null; sleep 15; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.