关于nohup命令执行后进程与终端输出的两个技术疑问
nohup相关问题解答
问题1:进程号10539对应的命令是什么?
先澄清一个错误用法:lsof -i:10539是用来查询监听特定网络端口的进程,但nohup、ls、sleep这类命令根本不会打开网络端口,所以查不到输出是正常的。要查看进程信息,应该用ps -p 10539或者ps aux | grep 10539。
回到核心问题:执行nohup ls -al &时,输出的[1] 10539里的10539是nohup进程的PID。nohup会作为父进程启动ls -al,由于ls -al执行速度极快,它结束后nohup也会跟着退出,这时候再查进程就找不到了。如果是nohup sleep 100000 &这种长时间运行的命令,用ps -p 12021就能看到nohup进程,它还会有一个sleep 100000的子进程。
简单说:10539对应的是nohup命令,它负责托管运行ls -al。
问题2:为何nohup: ignoring input and appending output to 'nohup.out'会单独出现在新行,且光标处于等待状态?
这是bash与后台进程的输出时序问题:
- 执行
nohup sleep 100000 &时,bash会立刻把任务放到后台,输出[1] 12021后就显示命令提示符debian@debian:~$,准备接收新命令。 - 而
nohup进程启动后才会输出那行提示信息,此时bash的提示符已经显示,所以这行提示会出现在提示符之后,看起来像是新行。 - 光标看似在等待,其实bash已经就绪,你可以直接输入命令——只是nohup的输出刚好在提示符之后显示,造成了视觉上的错觉。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

