Comando Mac lsof encontra todos os processos para todos os usuários

2

Há algum tempo meu professor me pediu para criar um script que mataria o Minecraft a qualquer momento. Funcionou quando o próprio usuário o executou, mas não o fez se estivesse no nível da raiz.

Existe um comando semelhante a lsof que localizou todos os processos, não apenas os do usuário que chamou lsof? Eu li a man page, mas não entendo muito bem. Existe um comando lsof que obterá todos os processos, não apenas os usuários?

Este é o script, projetado apenas para Macs:

#!/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)
    
por Hovestar 09.03.2013 / 03:40

2 respostas

2

Imprime os nomes de todos os processos:

ps -axco comm | sed 1d
  • -a : todos os usuários (como root quando executados como usuário e usuário quando executados como root)
  • -x : inclua processos sem um terminal de controle
  • -o comm : imprime somente a coluna de comando
  • -c : use nomes de comandos em vez de caminhos na coluna de comando
  • sed 1d : exclua a primeira linha ( COMM )

Se você quiser apenas sair do Minecraft, pode executar um script de shell como este (ou apenas killall minecraft com launchd ou cron ):

while sleep 5; do killall minecraft 2> /dev/null; done
    
por 09.03.2013 / 08:37
1

a command similar to lsof that scan all processes, not just ones by the user that called lsof

pgrep -f minecraft

Onde minecraft é o processo a ser encontrado. O comando retorna a lista de PIDs.

Aqui está o comando kill (sintaxe da shell):

kill $(pgrep -f minecraft)

Em vez de usar o Python, aqui está um comando shell simples para conseguir o mesmo:

while true; do echo kill $(pgrep -f minecraft) 2> /dev/null; sleep 15; done
    
por 19.10.2017 / 16:03