了解文件夹下运行的所有脚本 PIDS 的正确方法是什么

了解文件夹下运行的所有脚本 PIDS 的正确方法是什么

/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等)awkp.\.*\*

echo当您准备好让脚本真正执行终止操作时删除。

相关内容