我的博客

kill后台执行的python进程输出重定向为空

目录
  1. 实验

当使用 & 在后台执行linux命令时,使用输出重定型保存输出到文件中。再使用kill命令杀掉进程后,发现结果文件为空。

解决方法


可以使用 kill -2 <进程号> 杀进程,这样相当于给进程发送ctrl + c。

实验

编辑文件 test.py

import time

while true:
  print('hello')
  time.sleep(1)

这段代码每秒输出一个hello

执行命令 python test.sh &> log,一段时间后按下ctrl + c 退出,发现log文件中有内容,在刚刚命令后加 &,即 python test.sh &> log & , 一段时间后kill进程,发现log为空。再次执行 python test.sh &> log & ,使用kill -2 杀进程,发现log中有正确的内容(包括一个KeyboardInterrupt的异常信息),过程如下

sxw@DESKTOP:/mnt/c/Users$ python t.py &> log &
[1] 241
sxw@DESKTOP:/mnt/c/Users$ kill 241
sxw@DESKTOP:/mnt/c/Users$
[1]+  Terminated              python t.py &> log
sxw@DESKTOP:/mnt/c/Users$ cat log
sxw@DESKTOP:/mnt/c/Users$
sxw@DESKTOP:/mnt/c/Users$ python t.py &> log &
[1] 243
sxw@DESKTOP:/mnt/c/Users$ kill -2 243
sxw@DESKTOP:/mnt/c/Users$
[1]+  Exit 1                  python t.py &> log
sxw@DESKTOP:/mnt/c/Users$ cat log
hello
hello
hello
hello
hello
hello
hello
hello
Traceback (most recent call last):
  File "t.py", line 5, in <module>
    time.sleep(1)
KeyboardInterrupt
sxw@DESKTOP:/mnt/c/Users$

评论无需登录,可以匿名,欢迎评论!