<p>我建议看一下<a href="https://www.man7.org/linux/man-pages/man3/daemon.3.html" rel="nofollow noreferrer">daemon(3)</a></p>
<p>然后您可以捕获信号或重新打开标准输入。
取决于您希望对python脚本执行的操作。
(如果您不想使用任何python,请使用除sys和os以外的任何python库)</p>
<p><strong>编辑:</strong></p>
<p>我非常确定,当python脚本终止ssh连接时,ssh连接将明显关闭,因此启动连接的用户在该tty上运行的任何程序都将终止。
因此,您的c程序需要后台监控,并且可能需要
更改其uid和/或euid</p>
<p>尽管我试图重现您的代码,但我遇到了类似的问题:python脚本运行命令,然后打印“完成”
但当我试图阅读stdout时,整个脚本都停顿了。
我认为它正在等待脚本返回状态。
所以我做了以下改变:</p>
<pre><code>try:
port = '22'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('<host_name>', port=22, username='<username>',
password='<password>')
chan = client.get_transport().open_session()
chan.get_pty()
chan.exec_command("cd <script_directory>;\
; gcc test.c; ./a.out")
while True:
print(chan.recv(1024))
finally:
client.close()
</code></pre>
<p>这里的while循环用于获取c程序的输出。
但是,如果关闭python脚本,c程序将随之运行。
我对这个图书馆没有深入研究</p>
<p><strong>编辑2:</strong></p>
<p>查找<a href="https://en.wikipedia.org/wiki/Nohup" rel="nofollow noreferrer">nohup</a></p>
<p>如果您不想使用dedaemon方法</p>