个人博客地址:Linux远程kill进程及$处理 | 一张假钞的真实世界
在远程执行的命令中如果包含特殊字符($)时需要转义,如下:
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print $2}'"
以上语句的本意是得到进程的ID,但实际输出会是进程的信息。应该使用如下形式:
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print \$2}'"
如果远程执行命令是在脚本文件中,则需要多重转义。如:
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进程:
ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print \$2}' | xargs kill -9"