c - 捕获 SIGCHLD 并替换终止的孩子
问题描述
我正在分叉 n 个孩子并将每个孩子的 pid_t 保存在动态分配的表中(是的,我想这样做,因为我需要父进程拥有这些 id)。我的程序应该期待一个 SIGCHLD 信号,当它收到它时,它必须替换终止的子进程。所以,现在我必须用 pid_t 改变 child 的数组索引,并用一个新的 fork 替换它。
我的问题是,我怎么能真正做这样的事情,因为处理程序将被称为我的主程序“外部”,并且无法访问我的 pid 表。也许使表全局化并且只为父级初始化它?或者处理程序可以与 main 交互并以某种方式传递被释放和替换的 pid 值?
我可能会问,我是否应该首先创建这样一个表。我应该只使用 fork 的返回值而不是 parent 的表吗?在这种情况下,我将不得不创建一个if语句来检查每个 pid=fork() 而不是只有一个if语句将只输入 parentid 并且对于表中每个孩子的 id 都有一个循环。
编辑:我看不出我的代码有什么帮助,因为我想我解释了这个过程,但我描述的是。
signal(SIGCHLD,handler)
pid_t table[n];
for(int i=0;i<n;i++){
pid_t pid;
if((pid=fork())!=0){
table[i]=pid;
}
}
void handler(int num){
//what do i do here?
}
解决方案
推荐阅读
- java - 在 java.util.Scanner.nextLine(Scanner.java:1540) 处找不到行
- php - 文件夹首先来自 RecursiveDirectoryIterator
- c# - C# 错误必须声明标量变量“@EmpID”SQL 插入
- android - 如何在回收站视图中增加和减少项目的大小?
- javascript - 为什么当我发送它时立即触发事件?
- python - 如何使用 uart 将接收到的数据传输到 raspberry-pi3 中的其他控制器?
- python - 如何使用 Graph API 解析所有 Facebook 目标
- sql-server - SQL查询从多个大表中选择,执行时间太长
- javascript - DataTables js columnDefs使用变量渲染函数
- azure-devops - 来自多个分支的 Azure 数据工厂部署自动化