如何在后台启动程序

use*_*685 9 shell sudo background-process

Boblight程序不在后台运行。执行之间没有明显区别

sudo boblightd
Run Code Online (Sandbox Code Playgroud)

sudo boblightd& 
Run Code Online (Sandbox Code Playgroud)

如何解决控制台不会阻止进一步输入的问题?

pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog)                       start of log /root/.boblight/boblightd.log
(PrintFlags)                    starting boblightd
(CConfig::LoadConfigFromFile)   opening /etc/boblight.conf
(CConfig::CheckConfig)          checking config lines
(CConfig::CheckConfig)          config lines valid
(CConfig::BuildConfig)          building config
(CConfig::BuildConfig)          built config successfully
(main)                          starting devices
(CClientsHandler::Process)      opening listening TcpSocket on *:19333
(CDevice::Process)              ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process)              ambilight: setting up
(CDevice::Process)              ambilight: setup succeeded


pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd&
[1] 2289
pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog)                       start of log /root/.boblight/boblightd.log
(PrintFlags)                    starting boblightd
(CConfig::LoadConfigFromFile)   opening /etc/boblight.conf
(CConfig::CheckConfig)          checking config lines
(CConfig::CheckConfig)          config lines valid
(CConfig::BuildConfig)          building config
(CConfig::BuildConfig)          built config successfully
(main)                          starting devices
(CClientsHandler::Process)      opening listening TcpSocket on *:19333
(CDevice::Process)              ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process)              ambilight: setting up
(CDevice::Process)              ambilight: setup succeeded
Run Code Online (Sandbox Code Playgroud)

Dar*_*ook 22

[1] 2289后你的背景命令显示它的工作,并确实投入的背景。

但是除非您重定向,否则您的命令的输出仍将进入终端。这是做到这一点的综合方法:

sudo boblightd >std.txt 2>err.txt &
Run Code Online (Sandbox Code Playgroud)

如果您希望 stdout 和 stderr 都转到同一个文件:

sudo boblightd >std.txt 2>&1 &
Run Code Online (Sandbox Code Playgroud)

而且,当然,如果您不关心任何一个或两个流的输出,您可以发送到/dev/null而不是文件名。

sudo boblightd >/dev/null 2>err.txt &
Run Code Online (Sandbox Code Playgroud)

(该示例丢弃了标准输出,但保留了 stderr,以防万一出现问题。)


更新

以上是基于不知道 boblightd 是什么。我在另一个答案中看到它有一个守护进程模式,所以在这种情况下应该使用它。

顺便说一句,以上假设sudo不会提示输入密码,并且您不会关闭终端窗口。对于前者,我个人通常使用sudo bashthen,会输入boblightd >std.txt 2>err.txt &. 另一种方法是执行sudo ls或执行一些无害的命令来确保访问被缓存。

对于后者,nohup是确保它在您离开大楼后仍保持运行的神奇命令。它将sudo在实际命令之后和之前。例如sudo nohup boblightd >std.txt 2>err.txt &。或者sudo bashthen nohup boblightd >std.txt 2>err.txt &,然后exit(离开根外壳)。


小智 5

我认为您可以像这样使用 nohup 命令:

nohup sudo boblightd &
Run Code Online (Sandbox Code Playgroud)

这会将您的命令的输出放入当前目录中的 nohup.out 文件中。

您也可以像这样使用 screen 命令:首先创建一个屏幕:

screen -S your-sreen-name
Run Code Online (Sandbox Code Playgroud)

然后运行你的命令:

sudo boblightd
Run Code Online (Sandbox Code Playgroud)

要保存屏幕并返回到终端,请键入Ctrl+AD(Ctrl+Ascreen您想要做某事的提示,D然后“d”从会话中退出而不停止它)。

恢复你的屏幕:

screen -d -r your-screen-name
Run Code Online (Sandbox Code Playgroud)