Linux远程kill进程及$处理

在远程执行的命令中如果包含特殊字符($)时需要转义,如下:

1
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print $2}'"

以上语句的本意是得到进程的ID,但实际输出会是进程的信息。应该使用如下形式:

1
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print \$2}'"

如果远程执行命令是在脚本文件中,则需要多重转义。如:

1
2
3
4
5
6
sh exec.sh "ps -ef|grep process_name | grep -v 'grep ' | awk '{print \\\\\$2}'"  
exec.sh 内容如下:
ssh root@remote_host << EOF
eval "${command}"
exit
EOF

使用以下命令可以远程kill进程:

1
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print \$2}' | xargs kill -9"