Mac lsof 命令查找所有用户的所有进程

Mac lsof 命令查找所有用户的所有进程

不久前,我的老师让我编写一个脚本,该脚本会在 Minecraft 每次启动时将其终止。当用户自己运行它时,它会起作用,但如果它在 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)

答案1

这将打印所有进程的名称:

ps -axco comm | sed 1d
  • -a:所有用户(以用户身份运行时为 root,以 root 身份运行时为用户)
  • -x:包括没有控制终端的进程
  • -o comm:仅输出命令列
  • -c:在命令列中使用命令名称代替路径
  • sed 1d:删除第一行(COMM

如果你只想退出 Minecraft,你可以运行这样的 shell 脚本(或者直接killall minecraft使用launchd 或 cron):

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

答案2

类似于lsof扫描所有进程的命令,而不仅仅是调用该命令的用户的进程lsof

pgrep -f minecraft

minecraft要查找的进程在哪里。该命令返回 PID 列表。

以下是 kill 命令(shell 语法):

kill $(pgrep -f minecraft)

不使用 Python,这里有一个简单的 shell 命令来实现相同的功能:

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

相关内容