process - 向子进程发送 SIGSTOP
问题描述
我正在学习发送信号。我遇到 SIGSTOP 和 SIGCONT 分别暂停然后继续运行进程。
据我了解,当我们执行 fork() 时,我们不知道是父母还是孩子先执行。它取决于进程调度程序的体系结构。这就是为什么例如在 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 是否总是发生这种情况,或者这只是依赖于架构?我的意思是可能有一个孩子打印“你好我是孩子进程!”的情况。在暂停之前?
任何建议都非常感谢!谢谢!
解决方案
推荐阅读
- c++ - 单独文件中的简单类和标题不起作用
- vue.js - 如何在 vuetify 中使用“v-treeview”仅显示目录?
- r - 映射字符与双倍
- amazon-web-services - 更改帐户密钥后出现 AWS Lambda 403 禁止错误
- javascript - 真的没有办法关闭浏览器吗?
- angular - 使用带有 Angular 9 的 Bootstrap 对页面上的元素进行排序
- vue.js - 通过按钮单击从 vue 主页打开新的 vue 页面,这样主页的内容就不会出现
- c++ - 编译的库和可执行文件之间的 GCC 版本是否应该匹配?
- ios - 如何使用 Swift 在 Xcode 中使用切换开关关闭背景音乐?
- flutter - 如何使用 Flutter 创建管理 UI 左侧菜单