我有一个可以在后台运行很长时间的python脚本,我正试图找到一种从中获取状态更新的方法。基本上我们正在考虑发送一个SIGUSR1信号,然后让它报告状态更新。
在Python中捕获信号不是问题,有很多相关信息。
但是如何获取启动信号的过程的信息?似乎没有办法通过接收过程弄清楚启动过程的pid,这可以提供一种发送信息的方法。单个回复消息就足够了(在“忙于上传;现在为55%;将在这样的时间完成”的调整中);持续更新会很棒但不是必要的。
我想到的是将这些数据写入具有预定名称的临时文件 - 具有将陈旧文件留在后面的问题,然后需要某种清理程序。但这听起来像是一个黑客。有什么更好的可用吗?
发出正在运行的进程的方式并不重要,它不必是kill -SIGUSR1 pid
。任何与它沟通的方式都可以。只要通信可以从主进程运行后启动的新进程启动,可能在不同的用户下运行。
答案 0 :(得分:0)
信号不是设计为允许传递数据的通用进程间通信机制。他们做的不仅仅是提供通知。目标进程在响应中做的事情可能相当普遍(例如,生成输出到发送者然后知道要查看的特定文件),但是将数据直接传递回发送者需要不同的机制,如管道,共享内存,消息队列等。另请注意,一般情况下,接收信号的进程无法确定谁发送了信号,因此无论如何都不知道在哪里发送响应。