繁体   English   中英

一次杀死多个进程只能手动执行,而不能从脚本内部执行

[英]kill multiple process at once works only manually not from inside script

我试图同时杀死多个进程。 我使用这个简单的for循环通过PID编号终止进程。

for i in $(ps -ejH | grep omn_bdxtrc|awk '{print $1}'); do kill ${i}; done

如果我在终端中手动输入,则循环工作正常。 但是如果我想从文件(*.sh)它,它将返回此输出。

/functions.sh: line 231: kill: 25211
25698
27930
8477
5018
16383
13488
2403
10963 18796: arguments must be process or job IDs

尝试了多种手动操作方式,但无法通过文件操作。

任何想法为什么会这样?

提前致谢。

看起来PID是作为单个参数传递的,该参数由换行符分隔, kill似乎不喜欢。

我将通过完全删除循环并仅通过xargs传递PID kill来简化方法:

ps -ejH | grep omn_bdxtrc | awk '{print $1}' | xargs kill

或者(如果由于某种原因而没有或不想使用xargs ),则可以保留当前循环,并通过使用tr将所有可能的换行符更改为空格来清理awk的输出:

for i in $(ps -ejH | grep omn_bdxtrc | awk '{print $1}' | tr '\n' ' '); do kill ${i}; done

但这不是那么优雅。

假设您知道该进程的确切名称,最优雅的解决方案可能是使用killall

killall omn_bdxtrc

或者,如果您不知道确切的名称并且需要匹配一部分名称:

killall --regexp '.*omn_bdxtrc.*'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM