我想在 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
信号,进程可能只是忽略它。如果您想确定终止进程,请使用 -9
(-KILL
) 选项运行 kill
(请参阅 man 7 signal
信号代码)。
关于bash - Kill 在 while 循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442203/