Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c-Ncurses在置于后台时停止进程 问题:_C_Linux_Background Process_Jobs_Ncurses - Fatal编程技术网

c-Ncurses在置于后台时停止进程 问题:

c-Ncurses在置于后台时停止进程 问题:,c,linux,background-process,jobs,ncurses,C,Linux,Background Process,Jobs,Ncurses,Ncurses屏幕初始化会导致发送到后台的进程停止,只有在返回前台时才会恢复 问题: 是否可以让使用ncurses进行显示的进程仍在后台运行 是否有一种方法可以让流程自检它是否在后台运行,并在前台调用initialize ncurses,在发送回后台时结束它(并可能根据需要重复此操作) 笔记: 我只希望在进程在前台运行时更新显示 当进程处于后台时,不需要显示更新 非常感谢您的帮助 状态更新 2013/07/17 查看ncurses文档,了解initscr()在发送到后台时导致程序中

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

问题:
  • 是否可以让使用ncurses进行显示的进程仍在后台运行
  • 是否有一种方法可以让流程自检它是否在后台运行,并在前台调用initialize ncurses,在发送回后台时结束它(并可能根据需要重复此操作)
笔记:
  • 我只希望在进程在前台运行时更新显示
  • 当进程处于后台时,不需要显示更新

非常感谢您的帮助


状态更新 2013/07/17

  • 查看ncurses文档,了解initscr()在发送到后台时导致程序中断的原因

  • 研究过程状态的检测


我想凶手可能是(信号(7))

我不知道在使用ncurses时是否可以覆盖这些信号的信号处理。不过,这似乎没有多大意义:既不想从前台进程窃取输入,也不想以不受控制的方式在tty上乱涂乱画(破坏前台进程编写的任何内容)。所以我认为,你观察到的行为可能是唯一明智的


但是:如果您想在后台运行一些ncurses程序,您可以使用几乎所有Linux发行版中的screen。在分离的屏幕中运行您的进程,然后重新连接“screen-r-D”或类似功能。

您希望它在后台运行,但仍然更新显示?你打算如何与shell交互?我只想在进程在前台运行时更新显示。你能想到你曾经使用过的任何其他程序都能以你想要的方式运行吗?如果不是,那是个坏兆头。您可以通过比较
tcgetpgrp(…)
getpgrp()
来确定您是否处于后台,但我想不出一种方法来确保信息在所有更改中都保持最新。您如何将其置于后台?我不是专家,但它不是信号生成的吗?也许可以发现,然后执行一些操作,如endwin()
   SIGTTIN   21,21,26    Stop    tty input for background process
   SIGTTOU   22,22,27    Stop    tty output for background process