gpt4 book ai didi

linux - bash lsof : get pid from one tty to another one

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:37 24 4
gpt4 key购买 nike

如何获取在tty2中启动的进程在tty1中的pid?

上下文:
当文件超过预定义的最大大小时,尝试编写一个 bash 单行程序来终止生成文件的进程。 (单行程序尚未运行,因为需要将其嵌入到循环中)。

在测试期间,要点是 lsof 不会在终端 tty1 中返回任何 PID,尽管该 pid 存在于运行命令的 tty2 中。

tty1:生成文件并监控变化

MAX_SIZE_Ko=10001;file=test_lsof;dd if=/dev/zero of=$file bs=1k count=800;inotifywait $file;SIZE_Ko=$(du -s $file | cut -f1); [[ "$SIZE_Ko" -gt "$MAX_SIZE" ]] && ( PID=$(lsof $file | tail -n1 | awk -F" " '{ print $2 }') ; [[ ! -z $PID ]] && kill -9 $PID || echo "no running PID modifying $file" )

tty2 : 增加文件大小

for (( 1; 1; 1));do echo -e "foobar\n" >> test_lsof; echo $(( i++ ))" - pid="$$; done

最佳答案

正如在另一个答案中提到的,文件只打开了很短的时间,所以你的 lsof 捕获它的几率很低。

但是,您可以更改它:

exec 5>test_lsof
for (( 1; 1; 1)); do
echo -e "foobar\n" >&5
echo $(( i++ ))" - pid="$$
done

这使用高级 shell 重定向 - exec 行打开一个文件描述符,>&5 将命令的输出重定向到该文件描述符。

如果这样做,shell 将对 lsof 可见。

关于linux - bash lsof : get pid from one tty to another one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299545/

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