Linux父进程杀死子进程如何实现
时间: 2024-10-16 15:22:46 浏览: 50
在Linux中,父进程通常使用`wait()`、`waitpid()`、`wait4()`或者`waitid()`等系统调用来控制子进程的生命周期。其中,最常用的是`kill()`函数配合`SIGTERM`信号来实现非剥夺性结束(终止)子进程,步骤如下:
1. 父进程通过系统的`kill()`函数,向子进程的PID发送一个信号,比如`SIGTERM`。这个信号告诉子进程它应该停止并清理资源,而不是立即退出。
```c
#include <signal.h>
#include <unistd.h>
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
// ...执行任务...
exit(0); // 完成后正常退出
} else {
signal(SIGINT, SIG_DFL); // 阻止默认处理SIGINT
// 父进程等待子进程完成
pid_t status;
waitpid(child_pid, &status, 0);
// 检查状态,如果需要可以进一步采取措施
if (WIFEXITED(status)) {
printf("Child exited with code %d\n", WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("Child terminated by signal %d\n", WTERMSIG(status));
}
// 发送SIGKILL信号强制关闭子进程,如需紧急终止
kill(child_pid, SIGKILL);
}
```
在这个例子中,如果子进程收到`SIGTERM`信号,它可以选择自行清理并退出;如果父进程希望立刻结束子进程,可以直接调用`kill()`发送`SIGKILL`信号。
阅读全文