我想运行一个可执行文件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
,打印到终端,并将和重定向到。time
runtime.out
stdout
nohup
stdout
stderr
main
/dev/null
答案3
这似乎做了正确的事情:
$ time > runtime.out nohup ./main &> /dev/null &