我有一个可以启动和关闭进程的类。然而,这似乎并没有结束这一进程。在
我的python代码中,还有其他方法,但它们工作得很好
class KismetInstance:
"""Creates a kismet_server instance"""
def __init__(self, value=False):
logging.basicConfig(format='%(asctime)-15s::: %(message)s')
self.logger = logging.getLogger('kismet_instance')
self.example = value
def __create_kismet_instance__(self):
"""
Create a kismet_server subprocess.
:return:
"""
shell = ['sudo', '/usr/local/bin/kismet_server']
self.logger.debug('Attempting to run: %s', " ".join(shell))
self.kismet = Popen(shell, stdin=PIPE, stdout=PIPE, stderr=PIPE, cwd=r'./logs', preexec_fn=os.setsid)
def __destroy_kismet_instance__(self):
"""
Kill the subprocess
:return:
"""
os.killpg(os.getpgid(self.kismet.pid), 15)
它可以很好地创建子流程。但当我试图杀人时,我会犯这个错误(没有sudo)
^{pr2}$如果我用sudo运行,那么进程在运行之后仍然在运行。在
pi@raspberrypi ~/project $ ps -A | grep 'kismet'
2912 ? 00:00:00 kismet_server
我设法解决了这个问题。结果表明,子进程正在重新生成自己,从而导致python无法跟踪它。在
所以我不得不这么做来修复它,然而这并不是最优雅的解决方案,而且非常危险。在
如果您使用这个,请小心,因为如果您输入一个比我的更宽泛的术语(
'kismet'
),那么您可能会杀死系统上的许多进程。在相关问题 更多 >
编程相关推荐