如何在终端窗口中运行进程然后隐藏该窗口?

如何在终端窗口中运行进程然后隐藏该窗口?

我想python ~/program/proxy.py在启动时在终端中运行。然后隐藏这个终端窗口(因为它只是一个代理程序,我不想看到调试信息)。那么我怎样才能让它发挥作用呢?

答案1

恕我直言,最佳解决方案是将该代理作为系统守护进程运行。

小说教程应该教你核心概念。不幸的是,它有点以 SuSE 为中心,在其他发行版上,细节可能略有不同。使用它作为起点。

PS 您的问题有些奇怪,启动时启动的服务没有终端窗口。登录时启动的程序可以有一个终端窗口。也许您启用了自动登录功能,因此您将启动过程与登录过程混淆了。

答案2

更粗略的方法是编写一个简单的脚本来包装您的程序并将其与终端分离。就像是:

#!/bin/bash

nohup python ~/program/proxy.py > ~/.proxy.log 2>&1 &

然后您可以将其放入登录自动启动序列中(正如您可能已经完成的那样)。

答案3

使用tmux您可以启动一个实际上“隐藏”的分离进程,并根据需要附加它以检查其状态。如果您从终端启动它,您甚至可以关闭该终端会话,然后附加到您的tmux python 进程从另一个终端...

此示例用作watch运行命令,但只需替换您的 python 命令...它会在已脱离状态下启动 tmux 会话。

tmux new -d 'watch -n 1 -d date'

要查看“隐藏”(分离)会话的当前状态,只需tmux attach在终端窗口中键入...

您也可以使用,但根据此中的评论,screen我相信可能是更好的选择tmuxUnix-&-Linux 答案...

答案4

根据您希望在启动时多早运行,您可能需要使用 cron @reboot。

(您可能需要使用环境变量。)

然后将其包裹在独立的端子中。

tmux new -d '/path/to/python /full/path/program/proxy.py'
# or #
screen -d -m '/path/to/python /full/path/program/proxy.py'

实际上,这些都是以合成终端为背景的。

这通常用于“米老鼠”服务器进程,例如“sinatra”或“minecraft”,甚至无头“在家折叠”。

为了整洁/控制,您可能需要使用 shell 脚本来结束启动和调用来自 cron.

相关内容