我有一个打印到终端输出的应用程序 将它放在后台(用'&'),然后按任意键,例如按Enter键 重新显示提示(只是为了检查我在某些输出时仍然处于bash状态 从后台进程已经显示),后台进程似乎自发停止:
[1] Stopped (tty output) app
我理解它是因为进程得到SIGTTIN或SIGTTOU,这里可能是SIGTTIN,如果是printf等则是SIGTTOU
所以我有两个问题:
1。我试图从应用程序端处理它,只是阻止SIGTTOU和SIGTTIN,它有助于这种情况,我可以按下shell中的任何键, 但 当我在前台执行进程时 - 当然我的所有击键都被忽略!!!
所以,如何处理,以便它在fg 和 bg中工作
也许从终端和tty分离进程,但应用程序仍然能够打印到控制台?
2。一般来说,谁必须处理这些信号?应用程序或者它应该在tty配置中处理。 (TOSTOP?)
提前感谢!
答案 0 :(得分:0)
1。如何处理才能在fg和bg中正常工作?
如果您的应用仅将输出打印到控制台,则SIGTTIN或SIGTTOU不会有问题。
在您的情况下,您的应用似乎将输出打印到控制台,并且需要来自控制台的输入。 如果您的应用程序必须打印输出并且必须等待控制台输入,则无法成功在bg中运行该应用程序。
2。谁必须处理这些信号?
通常,应用应处理这些信号。您应该选择SIG_DFL
(默认操作),SIG_IGN
(忽略)或程序员定义的函数之一。