我想在一台ubuntu桌面电脑上开始一个大的模拟。我有物理(不是远程)访问这台电脑。这个模拟可能需要几个星期。启动进程的命令是:
mpirun -np 100 icoFoam -parallel | tee log
其中icoFoam
是可执行文件,-parallel
是它的选项。
此命令在终端中打印数据。在长时间的模拟过程中,有时终端被关闭或OS被随机注销,因此进程终止。我试图通过几个替代命令来解决这个问题:
nohup mpirun -np 100 icoFoam -parallel > log &
nohup mpirun -np 100 icoFoam -parallel > log & disown &
nohup mpirun -np 100 icoFoam -parallel | tee log & disown &
nohup mpirun -np 100 icoFoam -parallel | tee log & disown & > /dev/null 2>& 1 & nohup mpirun -np 100 icoFoam -parallel > /dev/null 2>& 1 &
systemd-run --scope --user mpirun -np 100 icoFoam -parallel | tee log &
systemd-run --scope --user mpirun -np 100 icoFoam -parallel | tee log & disown &
systemd-run --scope --user nohup mpirun -np 100 icoFoam -parallel | tee log & disown &
tmux
结果
除了表单tmux
之外,使用这些命令中的任何一个,当我关闭终端时,进程将终止。
当我从用户帐户注销时,tmux
也会被终止。
tee
在内的命令是由于关闭终端(从这里开始)而导致的SIGPIPE
而终止的。因此,我使用重定向到日志文件或/dev/null
(从这里开始),这两个文件都是通过关闭终端而终止的。systemd-run
。但它也会通过关闭终端而终止。mpirun
已经安装了自己的处理程序,覆盖了nohup
(从这里开始)的保护。mpirun
发送自定义处理程序,以避免覆盖nohup
。我的问题
我希望执行以下命令,以便它在终端中打印输出,只要终端未关闭,并且进程也不会通过关闭终端或从用户帐户注销而终止。
mpirun -np 100 icoFoam -parallel
操作系统: Ubuntu 18.04
可执行文件: OpenFOAM
(公开MPI):2.1.1
更新
所谓注销,我指的是按注销按钮(图像),而不是锁定屏幕(super+L)。
提前谢谢你。
发布于 2020-01-25 13:50:45
问题是,您是在桌面环境中开始作业的,因此作业是该桌面的子任务。当桌面结束时,无论出于什么原因,所有的孩子也会自动结束。“‘nohup”不会保存它们--注销将删除输出应该打印到的显示,这也会导致致命错误。
考虑在tty而不是终端窗口中运行tmux。然后,无论桌面正在做什么,进程都可以永远运行。
https://askubuntu.com/questions/1205614
复制相似问题