C - Ncurses在后台运行时停止进程

3

问题:

Ncurses屏幕初始化导致被发送到后台的进程停止,只有在重新回到前台时才能恢复。

问题:

  • 一个使用ncurses显示的进程是否可能仍在后台运行?
  • 是否有一种方法可以让进程自检测它是否在后台运行,并在前台调用初始化ncurses,然后在发送回后台时结束它(如果需要,可以重复此操作)?

注意事项:

  • 只希望在进程在前台运行时更新显示
  • 当进程在后台时,不需要更新显示。

感谢您的所有帮助。


状态更新

2013/07/17

  • 查看Ncurses文档以查找initscr()在发送到后台时导致程序中断的原因。

  • 研究进程状态的检测。


你想让它在后台运行但仍然更新显示吗?你打算如何与shell交互? - Carl Norum
我只希望在进程在前台运行时更新显示。 - Ambiguities
你能想到你曾经使用过的任何其他程序以你所期望的方式运行吗?如果没有,那是一个不好的迹象。你可以通过比较 tcgetpgrp(...)getpgrp() 来找出自己是否在后台运行,但我无法想到一种方法来确保该信息在所有更改中始终保持最新。 - user2404501
你怎么把它放在后台运行?我不是专家,但是难道不是通过生成信号来实现的吗?也许可以发现并执行一些动作,比如 endwin()。 - David Bern
1个回答

1

我认为罪犯可能是(来自signal(7))

   SIGTTIN   21,21,26    Stop    tty input for background process
   SIGTTOU   22,22,27    Stop    tty output for background process

我不知道在使用ncurses时是否可以覆盖这些信号的信号处理。尽管这似乎没有太多意义:既不想从前台进程中窃取输入,也不想以不受控制的方式涂鸦到tty上(破坏前台进程编写的任何内容)。因此,我认为你观察到的行为可能是唯一合理的...
但是:如果您想在后台运行某个ncurses程序,则可以使用几乎在任何Linux发行版中都存在的screen http://www.gnu.org/software/screen/。在分离的屏幕中运行您的进程,然后使用“screen -r -D”或类似命令重新连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接