从终端启动和分离程序的最有效方法?

Eva*_*van 14 command-line execute-command

我正在尝试以发生以下情况的方式从终端启动程序:

  1. 关闭终端不会关闭程序
  2. 程序在打开、使用或关闭时没有向终端输出任何内容
  3. 终端可免费用于其他用途
  4. 命令简短而甜蜜
  5. 无需担心输出文件

wal*_*tor 15

man nohup

NAME
   nohup - run a command immune to hangups, with output to a non-tty
Run Code Online (Sandbox Code Playgroud)

回答:

nohup program-name &
Run Code Online (Sandbox Code Playgroud)

  • 几乎就是我要找的东西。但是,当程序打开和关闭时,它仍然输出到屏幕:[1]+ Done nohup google-chrome (2认同)

gle*_*man 8

我认为这将是最完整的方式:

program-name </dev/null &>/dev/null &
disown %%
Run Code Online (Sandbox Code Playgroud)

取消后台进程意味着 shell 将不再跟踪它。它不会告诉你什么时候完成。它不会阻止您关闭外壳。%%意思是“最近的背景工作”。

如果你想隐藏所有的细节,在你的 .bashrc 中放一个这样的函数

launch_and_forget () { "$@" </dev/null &>/dev/null & disown %%; }
Run Code Online (Sandbox Code Playgroud)

然后

launch_and_forget program args "args args" ...
Run Code Online (Sandbox Code Playgroud)

取一个对你有意义的名字。


Pan*_*dya 6

您可以非常简单地使用setsid:-

NAME
       setsid - run a program in a new session

SYNOPSIS
       setsid program [arg...]

DESCRIPTION
       setsid runs a program in a new session.
Run Code Online (Sandbox Code Playgroud)

尝试以下命令:-

setsid <command>
Run Code Online (Sandbox Code Playgroud)

例如: - setsid geditsetsid nautilus ~/Downloads/