加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-13 18:58:10 所属栏目:Linux 来源:网络整理
导读:所以我试图在子进程中为SIGTSTP信号实现一个??信号处理程序. 基本上我想要实现的是: 启动子进程 让父级等待子进程 在子进程上调用Sleep,持续x秒. 在睡眠完成之前,我想发送一个Ctrl Z信号. 此信号应该停止子进程,但是恢复父进程 处理.然后父进程应该知道进程

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

基本上我想要实现的是:

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

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

到目前为止这是我的代码:

#include

目前,似乎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()查看子进程是退出还是已停止,并采取相应措施(这涉及实际杀死已停止的子进程).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读