我想运行一个命令,当终端关闭时不要退出。
例如,如果我跑 top & ; disown
, top
退出终端时退出。我想保留 top
活。
我知道这是可能的,因为命令 open
可以做到这一点。 (例如, open -e
打开TextEdit,当你退出终端时,TextEdit保持打开状态。)
提前致谢。
top
只是一个示例命令。我会使用一个不输出任何东西的不同命令。
我想运行一个命令,当终端关闭时不要退出。
例如,如果我跑 top & ; disown
, top
退出终端时退出。我想保留 top
活。
我知道这是可能的,因为命令 open
可以做到这一点。 (例如, open -e
打开TextEdit,当你退出终端时,TextEdit保持打开状态。)
提前致谢。
top
只是一个示例命令。我会使用一个不输出任何东西的不同命令。
Answers:
使用 屏幕 :
在运行中启动会话和进程 screen command
(例如。 screen top
)。从会话中分离出来 CTRL 一个 CTRL d 。
现在您可以关闭终端会话窗口或完全退出终端,之前启动的进程仍在运行。
在(重新)启动终端后,您可以获得所有分离会话的列表 screen -list
。使用pid重新连接到会话: screen -R [pid]
。要停止重新连接的会话的过程,请使用常用命令(例如, CTRL C 对于 top
)和 exit
停止会话。
如果要在新的立即分离的会话中启动进程,请使用: screen -d -m command
(例如。 screen -d -m top
)。这将在您当前打开的shell会话中获得新提示时创建新的屏幕会话。
请检查 man screen
有关冗长的描述,键绑定和自定义。
我认为这里的关键是基于这个声明:
例如,如果我运行top& ;当我退出终端时,我退出了。我想保持活力。
退出终端的那一刻,它会立即杀死你正在运行的任何东西。这是哪里 终端多路复用器 参加进来。
tmux是一个“终端多路复用器”,但它的最佳功能之一是即使你关闭终端它也会继续运行。
从他们的 man
页:
tmux是一个终端多路复用器:它可以从一个屏幕创建,访问和控制多个终端。 tmux可以从屏幕上分离并继续在后台运行,然后重新连接。
所以,如果你想发布 top
,即使终端退出,你也可以在后台继续进行分离。
sudo brew install tmux
sudo port install tmux
详细的安装信息可以在各自的网站上找到。
至于使用 tmux
,只需启动终端并执行 tmux
。您将获得一个带绿色条的终端屏幕。
执行(例如) top
。
退出并重新启动终端。
要获取会话列表:
tmux list-sessions
0: 1 windows (created Wed Sep 7 18:13:21 2016) [132x24]
附加到该特定会话
tmux attach -t0
会议重新开始。
某些程序作为终端窗口的子进程启动,因此关闭它将关闭程序。在这种情况下,相应地在单独的流程上启动此类程序:
在命令行上输入可执行文件的完整路径 (/Applications/Safari.app/Contents/MacOS/safari )
使用 打开 命令和相应的标志,例如-a for app( 打开-a Safari ),它在一个单独的进程(pid)中启动应用程序。一旦运行,您只需关闭终端窗口,应用程序将保持打开状态,而不是通过您现在使用的任何方式使用直接可执行执行。
“osascript”命令,它是OS X的终端命令,用于运行AppleScript等“开放脚本架构”脚本( osascript -e'打开应用程序“Safari”' )。
这三个都有一个单独的退出流程的方法,但它们各自的启动方式相似。
请记住,这些不是唯一的三个,而是您可以使用的最神秘的命令。我提供它们是因为我认为在终端中运行命令的任何人已经熟悉每个标准UNIX / Linux / FreeBSD发行版中可用的每个库存命令,并且很容易知道如何使用相关的命令来生成,终止,挂起,分叉,恢复,加入和分离线程和进程 - 这些是FreeBSD存在的唯一理由,因为操作系统安装在世界上盈利能力最强的公司的机器上。
无论如何,最后一件事:只有当前用户可以使用上述命令运行进程;在不同用户下使用这些命令启动进程,必须启用超级用户帐户( 苏 ),然后为每个命令添加前缀 须藤 。