如何继续在后台执行正在运行的python进程
收藏

可能这个问题还不清楚。下面的示例代码用于澄清。

# file: sock.py

password = getpass.getpass("Password: ")


def run_socket_server():
    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
        # code...


if __name__ == "__main__":
    run_socket_server()

运行脚本
python sock.py
Password:   # enter password

在此之后,进程将不在后台运行,从而阻塞终端中的用户输入。所以问题是如何在后台继续执行python进程,以允许用户在终端中输入?


最佳答案:

这个解决方案假设您想使用Python程序而不改变。
当程序要求输入密码时,必须先在前台运行。运行它作为

python sock.py &

当它想读取密码时,会用一个SIGTTIN信号来阻止它。这就是为什么要像你一样从前台开始。
如果在读取密码后不再需要终端输入,则可以在输入密码后按CTRL+Z将其停止,然后通过执行bg将其发送到后台。
(如果出于某种原因,您需要再次将作业置于前台,例如要提供输入,请执行fg

    公众号
    关注公众号订阅更多技术干货!