update name of code to labcodes
This commit is contained in:
59
labcodes/lab5/user/waitkill.c
Normal file
59
labcodes/lab5/user/waitkill.c
Normal file
@@ -0,0 +1,59 @@
|
||||
#include <ulib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user