问题描述
我正在学习发送信号。我遇到了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 (将#修改为@)