如何使用shell脚本去除linux进程ID中的多余字符



我正试图通过进程的pid来杀死它,这是我在网上找到的脚本。

PID=`ps -ef | grep myProcess | grep -v grep | awk '{print $2}'`  
echo -e Killing myProcess with pid: $PID..  

输出:使用pid杀死myProcess:13275^M。。

有人知道为什么会有一个^M吗?我该如何摆脱它,因为kill命令无法运行:

**arguments must be process or job IDs**

我在网上搜索了一下,但仍然不知道如何克服这个问题。。感谢您的帮助!!谢谢

首先,您的语法是错误的。使用$()调用命令并将其输出存储到变量

PID=$(ps -ef | grep myProcess | grep -v grep | awk '{print $2}')

其次,您可以在一个awk语句中完成这一切,而不需要额外的grep进程。

ps -eo pid,args | awk '/myProces[s]/{cmd="kill  "$1;print cmd; }'

从在线快速阅读开始,到awk的print命令总是附加一个换行符(有时可以用Control-M或^M表示(。

看来printf将是一个合适的替代方案。也许:

PID=ps -ef | grep myProcess | grep -v grep | awk '{printf "%i",$2}'

在我看来,你不想通过PID或其名称来杀死一个进程。通过获取进程PID,然后尝试通过PID杀死它。如果要按名称杀人,请使用killall processname

您只需使用:

PID=`pidof myProcess`

最新更新