从后台进程重定向stdout和stderr

fra*_*cup 4 linux bash time background stderr

我有一个名为foo的脚本,它运行程序a.exe并将计时统计信息发送到文件time.log

#!/bin/bash
date 1>> time.log
(time ./a.exe) 2>> time.log
Run Code Online (Sandbox Code Playgroud)

如果我在终端的后台运行脚本并保持我的shell打开直到a.exe完成,但是如果我在后台运行脚本并退出终端(a.exe需要很长时间才能运行)

foo & 
exit
Run Code Online (Sandbox Code Playgroud)

当我回来时,a.exe已经执行但时间统计信息没有出现在我的日志文件中.有人知道为什么吗?在我关闭父shell之后有没有办法获取时序统计信息?

谢谢

Joh*_*ica 5

nohup foo &
Run Code Online (Sandbox Code Playgroud)

当你退出shell时,它会向所有子进程发送一个SIGHUP信号,默认情况下会杀死它们.如果您希望进程在父shell退出时继续执行,那么您需要让它忽略SIGHUP.

名称

nohup - 调用一个免于挂断的命令

概要

nohup utility [arg ...]
Run Code Online (Sandbox Code Playgroud)

描述

所述的nohup实用程序调用命令与它的参数,并且在该时间设置为被忽略信号SIGHUP.如果标准输出是终端,则标准输出将附加到当前目录中的nohup.out文件中.如果标准错误是终端,则它将指向与标准输出相同的位置.