首页 > 解决方案 > 向子进程发送 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 是否总是发生这种情况,或者这只是依赖于架构?我的意思是可能有一个孩子打印“你好我是孩子进程!”的情况。在暂停之前?
任何建议都非常感谢!谢谢!

标签: processoperating-systemsignalsforkkill

解决方案


推荐阅读