用于子进程的SIGTSTP信号处理程序

前端之家收集整理的这篇文章主要介绍了用于子进程的SIGTSTP信号处理程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

所以我试图在子进程中为SIGTSTP信号实现一个​​信号处理程序.

基本上我想要实现的是:

>启动子进程
>让父级等待子进程
>在子进程上调用Sleep,持续x秒.
>在睡眠完成之前,我想发送一个Ctrl Z信号.
此信号应该停止子进程,但是恢复父进程
处理.然后父进程应该知道进程id
停止了进程.

我使用命令运行它:./ testsig sleep 10

到目前为止这是我的代码

#includedio.h>
#includeFailed\n");
    }
  }

目前,似乎ctrl Z有某种效果(但绝对不是我想要的!)

当我在孩子执行睡眠的中间点击ctrl Z时,光标继续闪烁(在我的情况下是10秒),但是控件没有到达父进程.

如果没有按下ctrl Z,控制将按预期返回到父级.

我究竟做错了什么?

我也看到了这个答案,但我真的无法理解它:

After suspending child process with SIGTSTP,shell not responding

最佳答案
你有两个过程:

>父母忽略了信号,
>设置处理程序的子进程然后执行另一个进程 – 这将从内存中清除信号处理程序的代码(执行的程序将被加载以代替调用进程),因此也将清除信号设置.因此,永远不会调用您的信号处理函数. Is it possible to signal handler to survive after “exec”?

你能做些什么来实现你的目标?

>父母应该忽略信号,
>孩子应该保留默认信号处理(停止它),
>父级应使用waitpid()查看子进程是退出还是已停止,并采取相应措施(这涉及实际杀死已停止的子进程).

原文链接:https://www.f2er.com/linux/440025.html

猜你在找的Linux相关文章