从终端启动应用程序后,如何自动拒绝该应用程序?
例如:如果您启动终端并运行firefox
应用程序将启动,但当您关闭终端时,firefox 也会关闭。为了避免无意中关闭从终端启动的应用程序,可以首先使用 ampersant: 将它们置于后台,firefox &
这也恢复了使用该终端提示符的能力。接下来,您可以使用应用程序的进程 ID (PID) 从同一终端取消该应用程序的所有权,请参阅下面的示例:
$ firefox &
$ ps | grep firefox
14917 pts/6 00:00:00 firefox
$ disown 14917
该应用程序现在独立于您正在使用的终端运行,关闭终端将不再终止该应用程序。
但是如何在每次启动应用程序时自动执行此操作呢?
答案1
最简单的方法是执行:
daemon firefox
这样您就可以继续使用/关闭终端本身
答案2
编辑:更好的答案由 IV 提供。
要自动执行此操作,您可以使用 bash 别名。如果将以下行添加到主目录中的 .bash_aliases 文件中,则可以my_application
使用以下命令从终端启动任何应用程序,同时自动将其置于后台,然后从该终端取消它的所有权s my_application
:
# start programs from shell but immediately disown them
startAndDisown() {
$1 & disown $!
}
alias s=startAndDisown
请注意,$!
自动返回最后一个异步作业的 PID。
答案3
firefox & disown $!
对我不起作用,但对我有用的类似解决方案是firefox&;disown
另一种不涉及的解决方案disown
是使用GNU Screen。即使您关闭终端窗口,它也会保留您的终端会话。然而,它的实用性取决于您如何使用终端。如果您一次只使用一个终端窗口,这是一个很好的解决方案。如果您使用更多终端,则更少。使用您最喜欢的包管理器安装 screen,然后每次打开终端类型screen -r
(或者screen
如果没有 screen 会话正在运行)。这样您就不必担心关闭终端。这是一个非常小众的解决方案,但它可能适合您。