当我发出
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
有时,进程在守护进程的帮助下继续运行。看看你是否也能杀死它。
您可以考虑的另外两件事是与进程关联的终端或者全杀命令。
答案3
您可以使用pkill mtp,或kill -9pidof mtp
请注意,如果有多个 mtp 进程,这两个命令都会杀死系统中的所有 mtp 进程。
拉米·罗森