/home/testing/scripts
在Linux 机器上的文件夹下,我们有 234 个不同的脚本,用于执行理智和测试
作为
/home/testing/scripts/test.network.py
/home/testing/scripts/test.hw.py
/home/testing/scripts/test.load.sh
.
.
.
在某些情况下,我们想杀死所有正在运行的脚本
所以为了找到正在运行的脚本 pid,我们这样做
lsof /home/testing/scripts/
并杀死我们使用的所有 pid:
for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done
假设我们只运行脚本 -/home/testing/scripts/test.network.py
从 ps -ef |grep "testing/scripts"
我们得到
root 5793 17546 84 09:20 ? 00:00:00 python3 -u /home/testing/scripts/test.network.py
所以lsof
我们应该得到相同的pid号
lsof /home/testing/scripts/
现在,我只是想知道我的方法是否
for proccess in `lsof /home/testing/scripts/ | awk '{print $2}' | grep -v proccess`; do kill $proccess; done
足以杀死下面所有正在运行的脚本/home/testing/scripts/
或者也许还有其他建议?
答案1
您可以稍微整理一下命令,但在我看来,它已经相当准确了。我会更紧密地匹配文件名以减少潜在的不匹配,并且我会确保每个候选 PID 实际上都是数字,
lsof | awk -v p='^/home/testing/scripts/' '$9~p && $2+0 {print $2}' | sort -u | xargs echo kill
请注意变量^
的目录分配开头的。您还应该转义可以被解释为正则表达式一部分的字符(即应该表示为、 the as等)awk
p
.
\.
*
\*
echo
当您准备好让脚本真正执行终止操作时删除。