linux c/c++ 杀死子进程
时间: 2024-09-14 17:12:08 浏览: 59
在Linux环境下,如果你有一个C/C++程序并想终止它的子进程,你可以使用`kill()`函数配合`pid_t`类型的进程标识符来发送信号给子进程。这里有几个常用的信号:
1. **SIGTERM** (15): 这是最常见的优雅停止信号,子进程收到后会先尝试清理资源然后停止运行。默认情况下,如果等待一段时间后子进程还未关闭,可以发送`SIGKILL`强制停止。
2. **SIGINT** (2): 进程接收到这个信号通常会中断当前操作并清理,然后退出。
3. **SIGKILL** (9): 强制立即杀死进程,无视资源清理,适合处理无法响应的僵尸进程。
以下是一个基本的示例,假设`child_pid`是你要终止的子进程ID:
```c
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
void handle_sig(int signum) {
// 子进程中捕获信号的处理函数,这里仅做简单示例,实际应用可能需要更复杂的清理工作
printf("Received signal %d, killing child process...\n", signum);
kill(child_pid, SIGKILL); // 发送SIGKILL信号
}
int main() {
// 初始化信号处理器
struct sigaction sa;
sa.sa_handler = handle_sig;
sigfillset(&sa.sa_mask); // 设置接受所有信号
sa.sa_flags = SA_RESTART; // 重启信号处理
sigaction(SIGINT, &sa, NULL); // 捕获SIGINT信号
pid_t child_pid = fork(); // 创建子进程
if (child_pid == 0) { // 子进程
// ... 进行必要的初始化后开始工作
exit(0); // 子进程正常结束
} else { // 父进程
// 等待子进程完成或设置定时器后发送信号
// ...
// 发送信号前检查子进程是否还在
if (waitpid(child_pid, NULL, 0) == -1) {
perror("Error checking child process");
}
}
return 0;
}
阅读全文