2

Некоторое время назад мой учитель попросил меня создать сценарий, который убивал бы Майнкрафт в любое время. Это сработало, когда пользователь сам запустил его, но не получилось, если оно было на уровне root.

Есть ли команда, похожая на 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 ответа2

2

Это печатает имена всех процессов:

ps -axco comm | sed 1d
  • -a: все пользователи (например, root при запуске от имени пользователя и user при запуске от имени root)
  • -x: включить процессы без управляющего терминала
  • -o comm: выводить только командный столбец
  • -c: использовать имена команд вместо путей в столбце команд
  • sed 1d: удалить первую строку (COMM)

Если вы хотите выйти только из Minecraft, вы можете запустить такой скрипт (или просто killall minecraft с помощью launchd или cron):

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

команда, похожая на 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .