【发布时间】:2022-01-03 08:30:28
【问题描述】:
我的程序有以下父子布局:
int main() {
std::vector<pid_t> kids;
pid_t forkid = fork();
if (forkid == 0) {
//child process
pid_t fork2 = fork()
if (fork2 == 0) {
// child process
}else {
//parent
kids.push_back(fork2);
}
}else {
// code here
kids.push_back(forkid);
}
// Not killing the fork2 process - only the first process(forkid) is terminated
for (pid_t k : kids) {
int status;
kill(k, SIGTERM);
waitpid(k, &status, 0);
}
}
我无法终止子进程 (fork2) - 第一个进程被终止。 kids 向量似乎只包含第一个进程的进程 ID。永远不会得到子进程的pid。
我在这里做错了什么。任何帮助将不胜感激。谢谢。
【问题讨论】:
-
问题是,child1 必须杀死 child2,(因为 child2 pid 在 child1 的 kids 向量中),但是 child1 在杀死 child2 之前就被杀死了。
标签: c++ pipe fork termination