使用 nohup 和 time 进行不同的输出

使用 nohup 和 time 进行不同的输出

我想运行一个可执行文件main并将所有输出重定向到/dev/null,同时我使用 测量其运行时间time并将结果写入到runtime.out。由于任务很长,我还必须用 来运行整个任务nohup
我尝试了以下操作:
nohup time ./main &> /dev/null &> runtime.out &
这只是将所有内容输出到runtime.out.我不需要main将运行时的输出保存到文件中。

答案1

time有一些东西可以用于此目的:

nohup time -o runtime.out ./main &> /dev/null &

如果它是脚本化的并且不需要 tty,我宁愿使用setsid而不是,因为它可以更好地“守护”,并且仍然可以在需要时nohup + &发送信号。HUP

setsid time -o runtime.out ./main </dev/null &>/dev/null

另请注意,这里(如OP的问题)time/usr/bin/time,它的输出格式与 bash 的内置time命令不同。如果需要的话,似乎会/usr/bin/time --portability给出类似的输出。

答案2

通过一些尝试和错误并从中汲取灵感使用 nohup 进行 bash 时间,我想出了以下内容:

$ nohup bash -c 'time ./main &> /dev/null' > runtime.out &
[1] 23178
nohup: ignoring input and redirecting stderr to stdout
$ 
[1]+  Done                    nohup bash -c 'time ./main &> /dev/null' > runtime.out
$ cat runtime.out 

real    0m0.004s
user    0m0.002s
sys     0m0.002s

这将重定向到stdout,打印到终端,并将和重定向到。timeruntime.outstdoutnohupstdoutstderrmain/dev/null

答案3

这似乎做了正确的事情:

$ time > runtime.out nohup ./main &> /dev/null &

相关内容