我遇到了一些麻烦:
我不清楚如何使用信号同步父进程和子进程,并且此代码不起作用。
我认为它应该这样工作:父发送信号给孩子,孩子的pause()
结束,孩子发信号给父母,父母的pause()
结束..等等
为什么不是这样呢?
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
void handler_cp() {
}
void handler_pc() {
}
void child_proc() {
int i = 0;
for (; i < 50; ++i) {
pause();
kill(getppid(), SIGUSR2);
}
void parent_proc(pid_t ch) {
int j = 0;
for (; j < 50; ++j) {
kill(ch, SIGUSR1);
pause();
}
}
int main(int argc, char* argv[]) {
signal(SIGUSR1, handler_cp);
signal(SIGUSR2, handler_pc);
pid_t ch = fork();
if (ch == 0)
child_proc();
else
parent_proc(ch);
return 0;
}
答案 0 :(得分:2)
信号可能会在调用pause
之前到达,在这种情况下它会死锁。通常,使用信号进行同步是一个非常糟糕的主意。
答案 1 :(得分:1)
在child_proc方法中,将行反转为:
kill(getppid(),SIGUSR2);
pause();
这将在孩子入睡前唤醒父母。