【问题标题】:How to get rid of extra characters in linux process ID using shell script如何使用 shell 脚本去除 linux 进程 ID 中的多余字符
【发布时间】:2011-04-12 06:08:30
【问题描述】:

我试图通过它的 pid 杀死一个进程,这是我从 web 找到的脚本。

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

输出:杀死 myProcesswith pid: 13275^M..

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

**arguments must be process or job IDs**

我在网上搜索,但仍然不知道如何克服这个.. 任何帮助表示赞赏!谢谢!

【问题讨论】:

    标签: linux shell unix command pid


    【解决方案1】:

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

    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; }'
    

    【讨论】:

    • 感谢您的信息,我会试试看!
    【解决方案2】:

    quick read online 开始,awk 的打印命令总是附加一个换行符(有时可以用 Control-M 或 ^M 表示)。

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

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

    【讨论】:

    • @kurumi - 抱歉,我目前无法测试 - 我需要调整什么?
    【解决方案3】:

    据我所知,您不想通过 PID 杀死进程,按其名称。你通过获取进程 PID 然后尝试通过 PID 杀死它来做到这一点。如果你想按名字杀人,请使用killall processname

    【讨论】:

      【解决方案4】:

      你可以使用:

      PID=`pidof myProcess`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 2011-09-20
        • 2012-08-14
        • 2019-06-27
        • 1970-01-01
        • 2012-11-14
        • 2011-09-25
        相关资源
        最近更新 更多