[英]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.