【问题标题】:C++ Linux - backgrounded process stop at keyboard press keyC++ Linux - 后台进程在键盘按键处停止
【发布时间】:2018-07-12 15:58:10
【问题描述】:

我有一个可以打印到终端输出的应用。
将其置于后台时(使用“&”),然后按任意键,例如按回车 重新显示提示(只是为了检查当某些输出时我是否仍在 bash 中 从后台进程已显示),后台进程似乎自发停止:

    [1] Stopped (tty output) app

我知道这是因为进程获取 SIGTTIN 或 SIGTTOU,这里可能是 SIGTTIN,如果是 printf 等,则可能是 SIGTTOU。 所以我有两个问题:
1.我尝试从应用程序端处理它,只需阻止 SIGTTOU 和 SIGTTIN,它有助于这种情况,我可以按外壳中的任何键,但是当我在前台执行进程时 - 当然我所有的击键都会被忽略!!!
那么,如何处理它才能在 fg bg ???
也许从终端和 tty 分离进程,但应用程序仍然能够打印到控制台吗?

2. 一般来说,谁必须处理这些信号? app 或者它应该在 tty 配置中处理。 (停止?)

提前致谢!

【问题讨论】:

    标签: linux linux-device-driver embedded-linux


    【解决方案1】:

    1.如何处理才能在fg和bg中正常工作?

    如果您的应用仅将输出打印到控制台,则 SIGTTIN 或 SIGTTOU 不会有问题。

    在您的情况下,您的应用似乎将输出打印到控制台并需要来自控制台的输入。 如果您的应用必须打印输出并且必须等待来自控制台的输入,则您无法在 bg 中成功运行该应用。

    2。谁必须处理这些信号?

    一般来说,应用应该处理这些信号。您应该选择SIG_DFL(默认操作)、SIG_IGN(忽略)或程序员定义的函数之一。

    【讨论】: