【发布时间】:2020-07-08 22:19:00
【问题描述】:
我有一个类似如下的 Python 脚本:
#!/usr/bin/env python
print("Start")
sql = get_sql_from_file(...)
# The following function takes a long time to run
execute_oracle_driver(sql)
print("Finished")
我执行它:
(my-env) $ time nohup python script.py &
然后我检查是否有任何初始输出,但什么也没有:
(my-env) $ cat nohup.out
(my-env) $
我至少希望在不超过几秒钟后看到“开始”。即使等了几分钟,然后杀死它,我也没有输出。如果可能,我该如何解决这个问题?
【问题讨论】:
-
不是完全特定于
nohup。默认情况下,每当标准输出以任何方式重定向到文件时都会发生这种情况。 -
...它甚至不是特定于 Python 的。 stackoverflow.com/questions/21389796/… 有这个问题的 C++ 版本,BashFAQ #9 有一篇关于它的优秀 BashFAQ 条目。
-
顺便说一句,如何在几分钟后杀死你的程序?如果您使用 TERM 而不是 KILL,那么它应该刷新其输出。 (这就是为什么系统管理员一直告诉人们不要使用
kill -9,除非作为最后的手段;程序不能刷新他们的缓冲区,清理他们的 SHM 段和临时文件,或者以其他方式做任何以这种方式终止时需要正常退出的工作)。 -
我使用的是
kill -9。看起来kill -s TERM <pid>是 better approach。 -
或者只是
kill <pid>,默认为TERM。
标签: python python-3.x cx-oracle nohup