为了杀死机器上运行的进程,某些本地进程(或内核)必须发出终止信号。因此,您需要一种方法来使进程发出该信号,并且由于您无法创建新进程,因此您需要找到一种完全依赖于已运行进程的方法。
没有标准的守护进程可以帮助你。他们都会处理您的身份验证,然后派生一个像您一样运行的新进程(例如 shell)。因此,如果您没有控制台访问权限并且没有与机器的现有交互,那么您就不走运了。
从您的评论来看,您的机器上似乎还有一个外壳。然后你可以做一些事情。您不能运行任何外部进程,例如ls
或ps
。但是你可以运行内置的诸如命令echo
,read
以及kill
(kill
是不是内置在所有的炮弹,但它是一个在所有的炮弹支持作业控制,如bash和zsh中)。
每个进程在/proc
:/proc/12345
下都有一个关联目录,其中 12345 是进程 ID。因此,您可以通过探索获得一些有关 exising 的信息/proc
。echo
使用通配符在这里很有帮助,例如cd /proc; echo [0-9]*
显示所有正在运行的进程的进程 ID。如果 shell 是 zsh,你可以用 glob 限定符做很多事情;例如echo /proc/*(u$UID)
仅显示在您的用户 ID 下运行的进程。
一种无需分叉即可显示文件内容的方法是
while read -r line; do
echo "$line"
done </path/to/file
Run Code Online (Sandbox Code Playgroud)
您可以通过将它们全部传递给kill
. 如果您已经确定了属于你的守护进程,试图杀死它的进程组kill -9 -PGID
,其中PGID
为组长的进程ID。您可以使用 找到进程 123 的进程组 ID </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp
。(相同的信息以更易读的形式存在,/proc/123/
但您的阅读条件不佳。)您还可以尝试使用以下命令向所有进程(包括原始 shell)发送信号
trap : NUM
kill -NUM -1
Run Code Online (Sandbox Code Playgroud)
选择除KILL
(9)以外的 NUM 值,以便该trap
命令确实导致您的 shell 忽略该信号(KILL
不能被捕获)。
归档时间: |
|
查看次数: |
17730 次 |
最近记录: |