【发布时间】:2014-09-17 21:17:55
【问题描述】:
使用python3/linux/bash:
gnr@localhost: cat my_script
#!/usr/bin/python3
import time, pexpect
p = pexpect.spawn('sleep 123')
p.sendintr()
time.sleep(1000)
按原样运行时效果很好(即my_script 启动一个sleep 123 子进程,然后发送一个SIGINT 杀死sleep 123)。但是,当我将my_script 作为孙进程的背景时,它不再能够杀死sleep 123 命令:
gnr@localhost: (my_script &> /dev/null &)
任何人都知道这里发生了什么/如何更改my_script 或pexpect 以仍然能够将SIGINT 发送到它的子进程?
我认为这与背景有关导致没有控制终端,也许我需要创建一个新的 pty?
更新:从未想过如何创建 pty(尽管使用 -t 选项 ssh'ing 到 localhost 有效) - 最终执行 os.fork() 来后台子进程而不是 (my_script &> /dev/null &) 有效因为(我猜)控制终端没有立即关闭。
【问题讨论】:
标签: python linux bash signals pexpect