如何判断运行我的python脚本的终端是否已关闭?如果用户关闭终端,我想安全地结束我的python脚本.我可以使用处理程序捕获SIGHUP,但不能在脚本以sudo身份运行时捕获.当我用sudo启动脚本并关闭终端时,python脚本继续运行.
示例脚本:
import signal
import time
import sys
def handler(signum, frame):
fd = open ("tmp.txt", "a")
fd.write(str(signum) + " handled\n")
fd.close()
sys.exit(0)
signal.signal(signal.SIGHUP, handler)
signal.signal(signal.SIGINT, handler)
signal.signal(signal.SIGTERM, handler)
time.sleep(50)
Run Code Online (Sandbox Code Playgroud)
有时,脚本将在以sudo身份运行时执行处理程序,但更常见的情况是不执行.在没有sudo的情况下运行时脚本总是写入文件.我在Raspberry Pi上运行它.我在LXTerminal和gnome-terminal中看到了相同的东西.这个示例脚本将在50秒后结束,但是我的冗长代码在无限循环中运行
最终目标是在Raspberry Pi上安装一个.desktop启动器来进行蓝牙扫描和查找设备.蓝牙扫描需要sudo,因为它使用4.0 BLE.我不确定为什么bluez需要sudo,但确实如此.在pi上输入sudo时,它从不要求输入密码,这对我来说很好.问题是关闭终端后,扫描过程仍在运行.扫描由在终端中运行的python脚本完成.
如何获取我没有为其创建对象的子进程的pid?即
myProc = Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)
VS
Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我在发送终止信号后没有轮询()或等待(),它们就变成了僵尸进程.在我的脚本中的某个点上,我想找到我的脚本是其父项的所有子进程,并向它们发送信号或轮询它们.这在python中可能吗?有可能吗?