在运行时从父终端临时禁用子进程

投掷

简介:有许多子进程的大型Linux应用程序,我需要这样的东西:

/* parent process, far from fork*/
suppress_child_output_to_parent_tty();

printf("important message");
/* huge piece of code */
printf("important message");

restore_child_output_to_parent_tty();

我知道存在一种通过以下方式实现此目的的标准方法

  • 制作管子
  • 派生,将STDOUT重定向到该管道,
  • 在不同线程的some循环中选择并读取管道/写入父标准输出,
  • 需要时手动暂停此循环

但是我不应该为此使用长寿命线程,我的应用程序可以作为具有多个多线程子代的多个实例来工作,并且存在一些OS sheduler问题,实际上,我应该节省cpu线程。因此,我为块子STDOUT寻找一些优雅的OS功能。

我能做什么?

福兹

这是不可能直接实现的:如果您使用fork(),则子级文件的描述符指向与父级文件相同的文件描述从操作系统的角度来看,父级访问文件描述符与子级访问文件描述符没有区别。有多种方法可以解决此问题(例如,通过将调试器附加到子级),但是它们确实很复杂。

最简单的方法可能是挂起孩子并恢复它:

kill(child, SIGSTOP);

printf("important message");
/* huge piece of code */
printf("important message");

kill(child, SIGCONT);

孩子不可能无视SIGSTOP设计。当第一个kill()呼叫成功时,您可以放心地认为孩子已停止。SIGCONT通话继续进行请注意,通过设计,其他过程可以让您的孩子继续之前的工作,但是您对此无能为力。

请注意,SIGCHLD如果停止您的孩子,则可能会收到一个信号,具体取决于您配置信号处理程序的方式。确保正确配置了所有内容,并阅读了相应的文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时从父终端临时禁用子进程

来自分类Dev

在运行时更改子进程的终止信号

来自分类Dev

在运行时禁用 Javascript 功能

来自分类Dev

当另一个正在运行时,如何打开子进程?

来自分类Dev

进程仍在运行时如何退出Powershell?

来自分类Dev

在进程仍在运行时旋转日志文件

来自分类Dev

是否可以在运行时获取从属进程的索引?

来自分类Dev

进程运行时可以更新终端窗口标题吗?

来自分类Dev

运行docker快速启动终端或在/ git bash shell中运行时,“ bash:fork:重试:无子进程”

来自分类Dev

使用JMX在运行时禁用ehcache

来自分类Dev

在运行时动态禁用休眠验证注释?

来自分类Dev

如何在运行时“禁用” require.js?

来自分类Dev

如何在运行时禁用cout输出?

来自分类Dev

在运行时本地启用/禁用OpenMP

来自分类Dev

C#在运行时启用/禁用网络跟踪?

来自分类Dev

AVAudioSession在运行时禁用背景音频

来自分类Dev

在运行时处理或禁用Sitecore字段的验证

来自分类Dev

使用JMX在运行时禁用ehcache

来自分类Dev

在运行时禁用/启用拦截器

来自分类Dev

如何在运行时禁用阴影?

来自分类Dev

ARCore:在运行时禁用增强图像

来自分类Dev

如何在运行时获取子例程的签名?

来自分类Dev

使用Java在运行时编译jasperreport子报表

来自分类Dev

运行命令行进程并在该进程仍在运行时获取输出?

来自分类Dev

在pycharm中运行时子进程不起作用

来自分类Dev

在运行时将FetchType.LAZY临时更改为FetchType.EAGER(Hibernate / JPA)

来自分类Dev

在运行时检查应用是否为临时| dev |应用商店构建

来自分类Dev

在运行时将FetchType.LAZY临时更改为FetchType.EAGER(Hibernate / JPA)

来自分类Dev

确定哪个核心在运行时运行Node.js进程

Related 相关文章

  1. 1

    在运行时从父终端临时禁用子进程

  2. 2

    在运行时更改子进程的终止信号

  3. 3

    在运行时禁用 Javascript 功能

  4. 4

    当另一个正在运行时,如何打开子进程?

  5. 5

    进程仍在运行时如何退出Powershell?

  6. 6

    在进程仍在运行时旋转日志文件

  7. 7

    是否可以在运行时获取从属进程的索引?

  8. 8

    进程运行时可以更新终端窗口标题吗?

  9. 9

    运行docker快速启动终端或在/ git bash shell中运行时,“ bash:fork:重试:无子进程”

  10. 10

    使用JMX在运行时禁用ehcache

  11. 11

    在运行时动态禁用休眠验证注释?

  12. 12

    如何在运行时“禁用” require.js?

  13. 13

    如何在运行时禁用cout输出?

  14. 14

    在运行时本地启用/禁用OpenMP

  15. 15

    C#在运行时启用/禁用网络跟踪?

  16. 16

    AVAudioSession在运行时禁用背景音频

  17. 17

    在运行时处理或禁用Sitecore字段的验证

  18. 18

    使用JMX在运行时禁用ehcache

  19. 19

    在运行时禁用/启用拦截器

  20. 20

    如何在运行时禁用阴影?

  21. 21

    ARCore:在运行时禁用增强图像

  22. 22

    如何在运行时获取子例程的签名?

  23. 23

    使用Java在运行时编译jasperreport子报表

  24. 24

    运行命令行进程并在该进程仍在运行时获取输出?

  25. 25

    在pycharm中运行时子进程不起作用

  26. 26

    在运行时将FetchType.LAZY临时更改为FetchType.EAGER(Hibernate / JPA)

  27. 27

    在运行时检查应用是否为临时| dev |应用商店构建

  28. 28

    在运行时将FetchType.LAZY临时更改为FetchType.EAGER(Hibernate / JPA)

  29. 29

    确定哪个核心在运行时运行Node.js进程

热门标签

归档