Это близко (используйте сигналы):
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
void usr1handler() {
}
int main(void) {
int pid;
signal(SIGUSR1, usr1handler);
if ((pid = fork()) == 0) {
while (1) {
pause();
write(1, "-", 1);
fflush(stdout);
kill(getppid(), SIGUSR1);
}
}
else {
sleep(1);
while (1) {
write(1, "+", 1);
fflush(stdout);
kill(pid, SIGUSR1);
pause();
}
}
}
Основной проблемой для этого является состояние гонки. Если процесс переходит к функции kill () до того, как другой переходит к pause (), программа останавливается. Это, вероятно, достаточно хорошо, чтобы начать вас, хотя. Я оставил там один сон, чтобы вы могли видеть, что он действительно печатается равномерно.