在使用 OpenSees 进行批处理等耗时较长的操作时,有时希望多个命令在同一控制台同时运行。这时就涉及到在后台运行命令。
在命令后面加入一个 &
符号可以实现前台与后台之间的切换。例如
1 | OpenSees model.tcl & |
这样,OpenSees 会在后台执行。但是此时,错误信息还会打印到控制台中。如果不希望打印在控制台中,而是打印成为 log 文件,可以使用重定向。注意 OpenSees 的大部分输出是通过标准错误输出 stderr
打印的。这里我们把标准输出和错误输出合并输出。
1 | OpenSees model.tcl > model.log 2>&1 & |
这样,在后台执行时,就不会在前台打印无用信息了。这里,2
代表标准错误输出 stderr
, 1
代表标准输出 stdout
。
用这种方式,可以同时运行多个命令
1 | OpenSees model1.tcl > model1.log 2>&1 & |
将这段命令写入脚本文件 batch.sh
中,就可以在后台并行运行以上三个模型了。
查看目前正在后台运行的命令,使用
1 | jobs -l |
可以看到列举出了目前正在后台运行的所有命令。
1 | [1] 13688 Running OpenSees model.tcl CYCLIC ST1 > logs/st1 2>&1 & |
正在运行的作业会显示 Running
,而运行结束的作业会显示 Done
。运行结束的作业只会显示一次,再次输入 jobs -l
会发现,结束的作业已经不见了。
如需要把命令切换至前台,可以使用 fg
加上所显示的作业的编号
1 | fg 1 |
可以看到,后台的命令切换到了前台。
本文的后台运行命令比较简单。对于更复杂的后台操作,可以使用 Linux 中的 screen
。