加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash函数可以杀死进程

发布时间:2020-12-15 21:55:09 所属栏目:安全 来源:网络整理
导读:我为这个函数创建了一个别名,以便在bash中杀死进程: 在我的.bashrc文件上 kill_process(){ # $1 being a parameter for the process name kill $(ps ax | grep "$1" | awk '{print $1}')}alias kill_process=kill_process 所以,假设我要杀死流星过程: 让我
我为这个函数创建了一个别名,以便在bash中杀死进程:

在我的.bashrc文件上

kill_process(){
    # $1 being a parameter for the process name
    kill $(ps ax | grep "$1" | awk '{print $1}')
}

alias kill_process=kill_process

所以,假设我要杀死流星过程:

让我们看看所有的流星过程:

ps aux | grep 'meteor' | awk '{print $2}' 

21565
21602
21575
21546

使用别名调用kill_process函数

kill_process meteor

bash: kill: (21612) - No such process

因此,kill_process函数有效地终止了流星进程,但它的kill命令查找不存在的pid.请注意,ps aux |未列出pid 21612 grep的.有什么想法来改进kill_process函数来避免这种情况吗?

解决方法

正如Swoogan在他的回答中所暗示的那样,按名称杀死进程的标准方法是使用killall.

至于你的kill_process函数,过滤ps的grep表达式将匹配自己的grep进程(你可以看到这个没有awk运行管道),但是当调用kill时,该进程不再运行.那是你看到的信息.

每次运行该命令时,grep都会再次使用新的PID运行:这是您在测试时无法在列表中找到它的原因.

你可以:

>首先运行ps,将其传输到文件或变量,然后grep
>将grep的PID从列表中过滤掉
>(更简单)supress kill输出:

kill $(...) 2>/dev/null

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读