在使用 OpenSees 进行批处理等耗时较长的操作时,有时希望多个命令在同一控制台同时运行。这时就涉及到在后台运行命令。

在命令后面加入一个 & 符号可以实现前台与后台之间的切换。例如

1
OpenSees model.tcl &

这样,OpenSees 会在后台执行。但是此时,错误信息还会打印到控制台中。如果不希望打印在控制台中,而是打印成为 log 文件,可以使用重定向。注意 OpenSees 的大部分输出是通过标准错误输出 stderr 打印的。这里我们把标准输出和错误输出合并输出。

1
OpenSees model.tcl > model.log 2>&1 &

这样,在后台执行时,就不会在前台打印无用信息了。这里,2 代表标准错误输出 stderr1 代表标准输出 stdout

用这种方式,可以同时运行多个命令

1
2
3
OpenSees model1.tcl > model1.log 2>&1 &
OpenSees model2.tcl > model2.log 2>&1 &
OpenSees model3.tcl > model3.log 2>&1 &

将这段命令写入脚本文件 batch.sh 中,就可以在后台并行运行以上三个模型了。

查看目前正在后台运行的命令,使用

1
jobs -l

可以看到列举出了目前正在后台运行的所有命令。

1
2
3
4
[1]  13688 Running         OpenSees model.tcl CYCLIC ST1 > logs/st1 2>&1 &
[2] 13689 Done OpenSees model.tcl CYCLIC ST2 > logs/st2 2>&1 &
[3]- 13693 Running OpenSees model.tcl CYCLIC ST3 > logs/st3 2>&1 &
[4]+ 13694 Running OpenSees model.tcl CYCLIC ST4 > logs/st4 2>&1 &

正在运行的作业会显示 Running ,而运行结束的作业会显示 Done 。运行结束的作业只会显示一次,再次输入 jobs -l 会发现,结束的作业已经不见了。

如需要把命令切换至前台,可以使用 fg 加上所显示的作业的编号

1
fg 1

可以看到,后台的命令切换到了前台。

本文的后台运行命令比较简单。对于更复杂的后台操作,可以使用 Linux 中的 screen