#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid1, pid2;
pid1 = fork();
if (pid1 < 0) {
fprintf(stderr, "Fork Failed\n");
return 1;
} else if (pid1 == 0) {
lockf(1, 1, 0);
printf("我是第一个子进程,我的PID是:19870905\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
// 父进程先等子进程1结束,再创建子进程2
waitpid(pid1, NULL, 0);
pid2 = fork();
if (pid2 < 0) {
fprintf(stderr, "Fork Failed\n");
return 1;
} else if (pid2 == 0) {
lockf(1, 1, 0);
printf("我是第二个子进程,我的PID是:20060928\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
// 再等子进程2结束
waitpid(pid2, NULL, 0);
lockf(1, 1, 0);
printf("我是父进程,我的PID是:1787075\n");
fflush(stdout);
lockf(1, 0, 0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KCmludCBtYWluKCkgewogICAgcGlkX3QgcGlkMSwgcGlkMjsKCiAgICBwaWQxID0gZm9yaygpOwogICAgaWYgKHBpZDEgPCAwKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICJGb3JrIEZhaWxlZFxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgaWYgKHBpZDEgPT0gMCkgewogICAgICAgIGxvY2tmKDEsIDEsIDApOwogICAgICAgIHByaW50Zigi5oiR5piv56ys5LiA5Liq5a2Q6L+b56iL77yM5oiR55qEUElE5piv77yaMTk4NzA5MDVcbiIpOwogICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgIGxvY2tmKDEsIDAsIDApOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIC8vIOeItui/m+eoi+WFiOetieWtkOi/m+eoizHnu5PmnZ/vvIzlho3liJvlu7rlrZDov5vnqIsyCiAgICB3YWl0cGlkKHBpZDEsIE5VTEwsIDApOwoKICAgIHBpZDIgPSBmb3JrKCk7CiAgICBpZiAocGlkMiA8IDApIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZvcmsgRmFpbGVkXG4iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSBpZiAocGlkMiA9PSAwKSB7CiAgICAgICAgbG9ja2YoMSwgMSwgMCk7CiAgICAgICAgcHJpbnRmKCLmiJHmmK/nrKzkuozkuKrlrZDov5vnqIvvvIzmiJHnmoRQSUTmmK/vvJoyMDA2MDkyOFxuIik7CiAgICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgICAgbG9ja2YoMSwgMCwgMCk7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgLy8g5YaN562J5a2Q6L+b56iLMue7k+adnwogICAgd2FpdHBpZChwaWQyLCBOVUxMLCAwKTsKCiAgICBsb2NrZigxLCAxLCAwKTsKICAgIHByaW50Zigi5oiR5piv54i26L+b56iL77yM5oiR55qEUElE5piv77yaMTc4NzA3NVxuIik7CiAgICBmZmx1c2goc3Rkb3V0KTsKICAgIGxvY2tmKDEsIDAsIDApOwoKICAgIHJldHVybiAwOwp9