#include #include void do_yield(void) { yield(); yield(); yield(); yield(); yield(); yield(); } int parent, pid1, pid2; void loop(void) { cprintf("child 1.\n"); while (1); } void work(void) { cprintf("child 2.\n"); do_yield(); if (kill(parent) == 0) { cprintf("kill parent ok.\n"); do_yield(); if (kill(pid1) == 0) { cprintf("kill child1 ok.\n"); exit(0); } } exit(-1); } int main(void) { parent = getpid(); if ((pid1 = fork()) == 0) { loop(); } assert(pid1 > 0); if ((pid2 = fork()) == 0) { work(); } if (pid2 > 0) { cprintf("wait child 1.\n"); waitpid(pid1, NULL); panic("waitpid %d returns\n", pid1); } else { kill(pid1); } panic("FAIL: T.T\n"); }