当PID不断变化时杀死进程

当PID不断变化时杀死进程

当我发出

ps aux | grep mtp

我明白了

ubuntu-+ 15934 0.1 0.0 519848 7068 ? 21:13 0:00 /usr/lib/gvfs/gvfsd-mtp --spawner :1.9 /org/gtk/gvfs/exec_spaw/20

因此,本例中的 PID 是 15934。但是每次运行时,PID 都会不同。除了PID之外还有其他方法杀死进程吗?

答案1

可能有一个父进程杀死子进程并分叉新的子进程。您可以使用 pstree 查找父进程:

pgrep mtp | xargs -i pstree -ps {}

或者您可以使用 ps 的 ppid 选项:

pgrep mtp | while read line; do ps -p $line -o ppid; done

然后就可以杀掉父进程了

答案2

如果你想终止一个不断变化的进程,你可以动态地这样做:

pkill name_of_process

或者

kill -kill $(ps -A | grep name_of_process | awk '{print $1}')

在这里了解有关 Kill 的更多信息:https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/

笔记:grep 或 sed 执行的搜索区分大小写,您必须确保将特定进程缩小到除 PID 之外的唯一标识符,然后才能使用这些示例杀死它。

如果您想动态查找该进程的父进程,您可以这样做:

ps -o ppid=$(ps -A | grep name_of_process | awk '{print $1}')

从那里你可以杀死父进程,因为你有它的 PPID。

如果您无法终止父进程,则必须诉诸第一个解决方案。问题是,有时进程的 PID 变化速度比您发现的要快。在这种情况下,您可能需要使用 Sed 而不是 Grep。第一个例子变成:

kill -kill $(ps -A | sed '/name_of_process/!d' | awk '{print $1}')

为了进一步加快速度,您可能需要磨练附注命令通过使用其他标志返回结果 other-A。查看 ps 手册页:

https://www.man7.org/linux/man-pages/man1/ps.1.html

有时,进程在守护进程的帮助下继续运行。看看你是否也能杀死它。

您可以考虑的另外两件事是与进程关联的终端或者全杀命令。

https://linoxy.com/linux-command/linux-killall-my-options/

答案3

您可以使用pkill mtp,或kill -9pidof mtp

请注意,如果有多个 mtp 进程,这两个命令都会杀死系统中的所有 mtp 进程。

拉米·罗森

答案4

pkill您可以根据启动进程的命令名称来启动(它是ps aux输出的最后/第 11 列)

sudo pkill -9 -f COMMAND_STARTING_THE_PROCESS*

因为在你的情况下启动该过程的命令是

/usr/lib/gvfs/gvfsd-mtp --spawner :1.9 /org/gtk/gvfs/exec_spaw/20

在此输入图像描述

你可以杀掉与脚本启动相关的所有进程gvfsd-mtp

sudo pkill -9 -f /usr/lib/gvfs/gvfsd-mtp*

注意:一定要使用sudo

相关内容