发送信号kill(pid, SIGINT)可以关闭子进程,然后再wait(NULL),最后exit退出
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
int main() {
pid_t pid;
pid = fork();
if(pid == 0) {
while(1) {
printf("child ----------------\n");
sleep(1);
}
} else if(pid > 0) {
int count = 0;
while(1) {
printf("father ----------------\n");
sleep(1);
count++;
if(count == 3) {
kill(pid, SIGINT);
wait(NULL);
printf("has kill child\n");
exit(0);
}
}
} else {
perror("fork");
}
return 0;
}
这样先关闭子进程,通过wait回收pbc资源,避免僵尸,最后退出
如果通过子进程关闭父进程kill(getppid(), SIGINT),再关闭自己,会先变成孤儿进程,再由守护进程回收pbc资源,多了一个环节,所以自己设计的时候,用父进程来操作会方便一点