搜尋

首頁  >  問答  >  主體

Linux如何根据进程名称的一部分kill掉进程

ps -ef | grep javadeploy.jar | grep -v grep | awk '{print $2}' | xargs kill

上面这条命令的意思是先通过ps将进程ID得到,然后再kill。但是有一个问题,就是如果这个进程不存在,kill就会出错。如何在这条命令上加个判断,如果存在则运行kill,不存在则不执行kill。

另外试过killall、pkill命令并不能kill。

——————————————分割线——————————————

该问题已经解决,给出解决方法:
1、由于是根据参数的一部分kill,所以直接使用pkill javadeploy.jar不行,但是可以使用pkill -f javadeploy.jar来kill该进程;
2、@小_秦 提供的方法,加上xargs后面--no-run-if-empty,即ps -ef | grep javadeploy.jar | grep -v grep | awk '{print $2}' | xargs --no-run-if-empty kill

伊谢尔伦伊谢尔伦2773 天前918

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 13:44:59

    killall -9 {名稱}

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 13:44:59

    你用一個好一點的shell,自動提示的,比如zsh就可以了,輸入一兩個字母,按一下tab鍵自動補全的

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:44:59

    把最後一個管道換成&&試試看呢

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:44:59

    pkill是用來實現進程名稱的一部分的kill的
    pgrep用於grep進程,直接傳回進程號,且不包含pgrep本身

    但這兩個工具都有個問題,就是不支援匹配程式參數。

    你這個需求,還是老實實用xargs吧。

    要加個判斷,樓上 小_秦 的辦法是可行的。

    回覆
    0
  • 取消回覆