使用命令运行应用程序而不阻止终端

使用命令运行应用程序而不阻止终端

我已经在 Ubuntu 18.04 LTS 中创建了一些命令(在 /usr/bin 中)来运行 Matlab、Weka 等应用程序。使用 Matlab 命令时,它会保留终端,直到我关闭 Matlab 或终端(如果我关闭终端,Matlab 也会关闭)。我该如何避免这个问题,这意味着 Matlab 命令在工作时不会保留终端?谢谢。

以下格式以前有效,但突然不起作用了。

#!/bin/bash

setsid /usr/local/MATLAB/R2018a/bin/matlab </dev/null >/dev/null 2>&1 & disown

现在 Matlab 只打开徽标但没有进行进一步的工作......

答案1

在这种情况下nohup [CMD] &是一个很好的选择。nohup从运行它的终端中释放命令并使其免受终端挂断的影响。

此外,您发布的命令会打开一个新会话并立即发送 EOF,从而</dev/null强制 matlab 不接受来自终端的任何输入。这可能是一个问题,具体取决于给定程序在打开时如何执行。我也不认为disown在这里有任何用处,因为 & 在后台运行它,而 setsid 应该将其从终端中释放。disown不会断开程序与终端的连接,只会将其从作业列表中删除。无论如何,我会nohup [CMD] &按原样使用它

1)将程序与运行它的终端分离

2)关闭标准输入

3) 将 stdout 和 stderr 重定向到单独的文件进行检查,而不是直接将其发送到/dev/null深渊

4)&最后将其置于背景中

相关内容