【问题标题】:Background Process stops after input输入后后台进程停止
【发布时间】:2018-12-03 02:05:32
【问题描述】:

我正在尝试使用在后台运行 nodemon

nodemon index.js &

nodemon 输出其初始化

[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
listening on port 8080

没有提示,但是,任何命令都会运行
(第一次按回车后出现提示)
运行 cd 会导致 bash 输出:

[1]+  Stopped                 nodemon index.js  (wd: ~/foo/bar)
(wd now: ~)

显示 nodemon 已停止运行

请帮帮我

据我了解,bash 应该将程序置于后台,并且就像所有其他在后台持续运行的进程一样,用户输入应该停止影响该进程的行为。

这应该发生吗?
我错过了什么吗?
如何在后台正常运行程序?
感谢大家的关注和时间。

附加

我发现反复按enter 会导致作业停止,输出略有不同:

[1]+  Stopped                 nodemon index.js

只有在多次按下enter 键时才会出现这种情况。有时它会在多按 1 次之后发生,而其他时候它会在更多次之后发生。按压次数没有明显规律

baz: command not found之后作业以同样的方式停止

【问题讨论】:

  • nodemon 在运行时是否从 stdin 读取?根据 bash 手册:“只允许 foreground 进程从终端读取。尝试从终端读取的后台进程由内核的终端驱动程序发送 SIGTTIN 信号,除非被捕获,否则会暂停进程。"

标签: bash jobs nodemon


【解决方案1】:

您的程序正按预期在后台启动,并且确实与用户输入断开连接。但是,当您在后台处理进程时,在您按下 Enter 之前,作业控制输出看起来就像是暂停。尝试例如sleep 1 & - 类似的一行

[1]+ 完成睡眠 1

当您按 Enter 后台进程完成后会出现。

我怀疑这可能是为了避免在用户尝试键入另一个命令时将行输出到屏幕上。

【讨论】: