我已经在 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)&
最后将其置于背景中