Answers:
运行pgrep -f "ssh.*-D"
,看看是否返回正确的进程ID。如果是这样,只需更改pgrep
为pkill
并保持相同的选项和样式
另外,kill -9
除非绝对必要,否则不要使用aka SIGKILL,因为程序无法在退出前诱捕SIGKILL对其进行清理。我只kill -9
在尝试了-1
-2
和之后使用-3
。
for
循环;)kill -i
i
pgrep
不是OSX上的本机,您必须从第三方获得它。关于该主题的上一个主题有建议和替代方法。
-a
标记pgrep
,使其不仅打印进程ID,而且打印命令(包括参数),可能会很有用。通过这种方式,很容易验证仅所需过程是否匹配。
您可以利用proc文件系统来收集信息。例如:
for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done
这不是完美的,您需要一个更专用的正则表达式(特别是如果您正在杀死进程),但echo $proc | awk -F'/' '{ print $3 }'
会向您显示进程的PID。
/proc
。并且已经有一个强大的工具可以执行此操作,称为pgrep
(至少在Solaris和Linux上本机可用)。
pgrep
并且pkill
是Solaris和Linux下的命令可靠地找到或杀进程的名字。