我正在创建一个进程调度程序,所有进程都像./program > out.txt
一样启动。
在程序运行且产生输出的同时,我如何读取所有数据并自动截断文件,即确保在读取操作后不会在截断文件之前写入任何数据。
我无法修改schedule命令或程序。但是,数据收集器知道数据生产者进程PID,并且允许数据收集器控制/暂停该过程。
所有“读取所有数据”是指所有刷新的数据。如果我可以从外部强制冲洗管道,这将对您有所帮助,请编写,但是主要的问题是如何确保未冲洗/缓冲的管道数据在读取和截断操作之间永远不会被冲洗。
答案 0 :(得分:2)
您可以使用
暂停并继续进行操作kill -STOP $pid
kill -CONTINUE $pid
但是,我不认为kill -STOP $pid
是同步的,因此您应该循环并等待直到过程更改状态(在/proc
或通过ps
中可用)。
此外,由于PID的回收,上述操作本质上是不合理的(您可能会遇到意外的过程),除非您以{pid}不会获得pid的方式从$pid
的父级进行操作您完成了kill
调用(交互式shell在SIGCHLD处理程序中自动获取pid)。
答案 1 :(得分:-1)