PID 号不匹配

PID number mismatch

我在 Python 中使用以下代码(只是相关代码)生成了一个进程:

...
_LAUNCH_CMD = '/usr/bin/omxplayer -s --vol %s %s %s'
...
cmd = self._LAUNCH_CMD % (volume, args, file)
...
self._process = pexpect.spawn(cmd, timeout=5)

总是正常启动。在某些情况下,我需要获取进程的 PID 并从 python 代码中将其终止。我试过了

self._process.pid

它给了我一个 PID,但过了一段时间我意识到它不起作用,因为这个命令总是 returns 比实际进程少 10。 例如,当 omxplayer 运行时,我使用之前的命令检查 PID returns“24178”,但是当我使用 "pidof omxplayer.bin" 时,它 returns“24188”。我不知道 10 是常数还是可以改变,所以我认为像这样硬编码它不是一个好主意

os.system("kill -9 %s" % (self._process.pid + 10))

有人知道造成差异的原因或解决方案吗?

可能 /usr/bin/omxplayer 是一个执行 omxplayer.bin 的包装器,它被分配了一个新的 PID。如果您直接执行 omxplayer.bin,您将避免手头的问题,但您需要在启动真正的二进制文件之前完成 /usr/bin/omxplayer 正在做的工作。 PID 是随机的,所以你不能打赌 PID 总是相差 10。