如何解决发送SIGSTOP到子进程
我正在学习发送信号。我遇到了SIGSTOP和SIGCONT分别暂停然后继续运行的过程。
据我了解,当我们执行fork()时,我们不知道父母还是孩子会先执行。它取决于流程调度程序的体系结构。这就是为什么例如在分叉之后我们在父级和子级中分别打印某些内容时,无法确定执行顺序的原因。 (除非我们在父级中使用wait()来同步两个进程)。
现在,我正在从父级向子级发送SIGSTOP信号,然后在父级完成一些计算之后,向子级发送SIGCONT信号以恢复操作。到目前为止,每次我运行代码时,子进程下的任何代码都不会执行。但是我想知道是否会一直如此?子进程中的指令在从其父级接收到SIGSTOP之前会被执行吗?这是一些示例代码:
pid_t pid_c = fork();
if (pid_c == 0){
printf("Hello I am the child process!\n");
}
else {
kill(pid_c,SIGSTOP);
printf("Hello I am the parent process!\n");
// do some computation
kill(pid_c,SIGCONT);
wait(&NULL)
}
当我尝试执行上述代码时,父进程始终从打印语句开始,因此SIGSTOP能够在执行任何操作之前暂停子执行。 SIGSTOP是否总是会发生这种情况,还是仅取决于体系结构?我的意思是,在某些情况下,孩子可能会打印“你好,我是孩子的过程!”停下来之前?
任何建议,不胜感激!谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。