当我调用 kill() 函数杀死一个进程时,它会立即返回,因为它只是发送了一个信号。我的代码在一个无限循环中检查一些(外部的,不由我编写或修改的)进程,如果它们超过一些限制(如占用太多内存等),就会杀死它们(同时写入 syslog 等)。问题是当进程大量使用交换空间时,需要许多秒才能将它们杀死,因此我的进程会执行相同的检查多次,并尝试向同一进程发送多次信号,也写入 syslog。(这不是故意的,这是我正在尝试解决的副作用)
我不关心它向进程发送信号的次数,但我关心它写入 syslog 的次数。我可以保持已经发送过 kill 信号的 PID 列表,但理论上,即使概率很低,可能有另一个进程生成了与先前被杀死的进程相同的 pid,该进程也可能需要被杀死,在这种情况下,日志将不完整。
我不知道是否存在任何进程的唯一标识符,但我怀疑不存在。那么我应该如何同步地杀死一个进程,或者跟踪已经收到信号不需要再记录的进程?
我不关心它向进程发送信号的次数,但我关心它写入 syslog 的次数。我可以保持已经发送过 kill 信号的 PID 列表,但理论上,即使概率很低,可能有另一个进程生成了与先前被杀死的进程相同的 pid,该进程也可能需要被杀死,在这种情况下,日志将不完整。
我不知道是否存在任何进程的唯一标识符,但我怀疑不存在。那么我应该如何同步地杀死一个进程,或者跟踪已经收到信号不需要再记录的进程?