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+A是screen您想要做某事的提示,D然后“d”从会话中退出而不停止它)。
恢复你的屏幕:
screen -d -r your-screen-name
Run Code Online (Sandbox Code Playgroud)