bash 命令后 nohup 的输出

问题描述 投票:0回答:1

nohup 可以运行不受挂起影响的命令,并将输出输出到非 tty。 让我们在 bash 命令之后使用 nohup 运行一个简单的命令:

nohup ls -al &

我这里有两个问题:
1.处理10539
对于第一行输出,它是

[1] 10539
,表示有一个进程 10539。

我打开其他终端窗口来执行:

sudo lsof -i:10539    
#nothing in the output

哪个命令导致进程号为 10539?

nohup ls -al &
ls -al &
ls -al

2.为什么

nohup: ignoring input and appending output to 'nohup.out'
作为终端中的新命令,而光标正在等待某些东西?

用很长的 bash 命令来测试:

debian@debian:~$ nohup  sleep 100000 &
[1] 12021
debian@debian:~$ nohup: ignoring input and appending output to 'nohup.out'

并在新终端中执行:

sudo lsof -i:12021
#nothing for the command
bash nohup
1个回答
0
投票

1:您使用了错误的选项

lsof
。它的
-i
选项选择实际上是互联网端口的“文件”,而不是进程(并且
-i:10539
仅选择那些绑定到 TCP 或 UDP 端口号 10539 的文件)。您需要
-p
(进程 ID)选项:
sudo lsof -p 10539
。检查
man lsof
了解更多详情。

2:

nohup: ignoring input and appending output to 'nohup.out'
不是一个新命令,它只是输出到您期望命令输入的位置。它唯一等待的就是您输入另一个命令。

对于

nohup somecommand &
&
会发生在
nohup
之前。也就是说,它在后台运行命令
nohup somecommand
,而不是 nohupping
somecommand &

因此,您的 shell 在后台触发

nohup somecommand
,然后立即打印提示符 (
debian@debian:~$ 
) 以指示您已准备好输入另一个命令。然后在那之后,后台的
nohup
命令获取其方位,发现它需要重定向I/O,执行重定向,然后打印一条消息(
nohup: ignoring input...
)表示它已完成重定向。

nohup
不知道这条消息会在 shell 提示符后打印(因此看起来像是一个命令),它只是将文本发送到终端,而终端只是像被告知的那样打印它。

此外,由于消息以换行符结尾,终端会将光标移动到下一行的开头,因此看起来您不再处于 shell 的命令提示符处。但这只是表面现象。就您的 shell 而言,它只是打印了提示符,并准备好让您输入新命令。尝试一下——只需输入一些普通命令并按回车键,它就会正常执行。

如果您希望屏幕看起来不那么混乱,请为命令添加短暂的延迟,例如

nohup ls -al & sleep 1
。这将使您的 shell 在打印提示符之前等待一秒钟,从而为
nohup
留出时间在不太混乱的地方打印其消息。

© www.soinside.com 2019 - 2024. All rights reserved.