Bash 脚本如何查找并终止具有特定参数的进程?

Bash 脚本如何查找并终止具有特定参数的进程?

我想要一个脚本来杀死使用 -D 参数运行的实例ssh(设置本地代理)。

我手动ps -A | grep -i ssh查找带有 -D 的实例,以及kill -9 {id}每个实例。

但是 bash 脚本形式是什么样子的呢?

(我使用的是 Mac OS X,但将通过安装任何必要的命令port

答案1

运行pgrep -f "ssh.*-D"并查看是否返回正确的进程 ID。如果是这样,只需更改pgreppkill并保留相同的选项和模式

另外,除非绝对必要,否则不应使用kill -9又名 SIGKILL,因为程序无法捕获 SIGKILL 在退出之前自行清理。我只kill -9在第一次尝试后使用-1 -2-3

答案2

还,

kill `pgrep -f "ssh.*-D"`

答案3

您可以利用 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。

相关内容