不久前,我的老师让我编写一个脚本,该脚本会在 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