gpt4 book ai didi

bash - kill 在 while 循环中不起作用

转载 作者:行者123 更新时间:2023-11-29 09:51:21 27 4
gpt4 key购买 nike

我想在 while 循环中终止 lsof 给出的所有进程。

这很好用:

lsof -i tcp | grep -v iceweasel | awk '{ print $2 }' | while read -r line
do
echo "$line"

done;

这个不是:

lsof -i tcp | grep -v iceweasel | awk '{ print $2 }' | while read -r line
do
kill "$line"

done;

这最后一次产生的错误是:

./kill.all.sh: line 6: kill: PID: arguments must be process or job IDs

有什么想法吗?谢谢。

最佳答案

问题在于 lsof -i tcp 的输出包含 header ,其 PID 项最终传递给 kill 命令(kill PID) 从而导致错误。

要么使用 -t 选项进行 headless 输出,要么使用 AWK 忽略第一行:

awk 'NR > 1 { print $2 }'

其中 NR 是记录(行)号。

请注意,kill 仅向进程发送 SIGTERM 信号,进程可能只是忽略它。如果你想确定终止进程,运行 kill with -9 (-KILL) 选项(引用 man 7 signal 用于信号代码)。

关于bash - kill 在 while 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com