首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nohup和mpirun之间有什么冲突吗?

nohup和mpirun之间有什么冲突吗?
EN

Ask Ubuntu用户
提问于 2020-01-25 10:34:42
回答 1查看 1.5K关注 0票数 1

我想在一台ubuntu桌面电脑上开始一个大的模拟。我有物理(不是远程)访问这台电脑。这个模拟可能需要几个星期。启动进程的命令是:

代码语言:javascript
运行
复制
mpirun -np 100 icoFoam -parallel | tee log

其中icoFoam是可执行文件,-parallel是它的选项。

此命令在终端中打印数据。在长时间的模拟过程中,有时终端被关闭或OS被随机注销,因此进程终止。我试图通过几个替代命令来解决这个问题:

代码语言:javascript
运行
复制
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也会被终止。

我的发现

  1. 作为最简单的解决办法,我混合了nohup和nohup( 从这里开始 )。
  2. 我猜到包括tee在内的命令是由于关闭终端(从这里开始)而导致的SIGPIPE而终止的。因此,我使用重定向到日志文件或/dev/null (从这里开始),这两个文件都是通过关闭终端而终止的。
  3. 我还检查了systemd-run。但它也会通过关闭终端而终止。
  4. 为了查看程序是否安装了自己的处理程序,我执行了以下操作: nohup -np 100 icoFoam -parallel > log & grep /proc/$!/status,它返回SigIgn: 0000000000000000,因此,我想是这样的,即mpirun已经安装了自己的处理程序,覆盖了nohup (从这里开始)的保护。
  5. 我不知道是否可以向mpirun发送自定义处理程序,以避免覆盖nohup

我的问题

我希望执行以下命令,以便它在终端中打印输出,只要终端未关闭,并且进程也不会通过关闭终端或从用户帐户注销而终止。

代码语言:javascript
运行
复制
mpirun -np 100 icoFoam -parallel

操作系统: Ubuntu 18.04

可执行文件: OpenFOAM

(公开MPI):2.1.1

更新

所谓注销,我指的是按注销按钮(图像),而不是锁定屏幕(super+L)。

提前谢谢你。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-01-25 13:50:45

问题是,您是在桌面环境中开始作业的,因此作业是该桌面的子任务。当桌面结束时,无论出于什么原因,所有的孩子也会自动结束。“‘nohup”不会保存它们--注销将删除输出应该打印到的显示,这也会导致致命错误。

考虑在tty而不是终端窗口中运行tmux。然后,无论桌面正在做什么,进程都可以永远运行。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1205614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档