小编pet*_*EEy的帖子

终端关闭时终止sudo python脚本

如何判断运行我的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脚本完成.

python linux raspberry-pi

3
推荐指数
1
解决办法
1020
查看次数

如何在python中"采用"子进程

如何获取我没有为其创建对象的子进程的pid?即

myProc = Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)

VS

Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我在发送终止信号后没有轮询()或等待(),它们就变成了僵尸进程.在我的脚本中的某个点上,我想找到我的脚本是其父项的所有子进程,并向它们发送信号或轮询它们.这在python中可能吗?有可能吗?

python linux subprocess

1
推荐指数
1
解决办法
285
查看次数

标签 统计

linux ×2

python ×2

raspberry-pi ×1

subprocess ×1