gpt4 book ai didi

c - 找出进程数

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:57 24 4
gpt4 key购买 nike

我有一个简单的 pipe 程序,它创建子进程以写入一些信息,父进程将显示此信息。

int main() {
int pfd[2], i, n;
pipe(pfd);
for(i=0; i<3; i++) {
if(fork() == 0) {
write(pfd[1], &i, sizeof(int));
close(pfd[0]); close(pfd[1]);
exit(0);
}
else {

}
}
for(i=0; i<3; i++) {
wait(0);
read(pfd[0], &n, sizeof(int));
printf("%d\n", n);
}
close(pfd[0]); close(pfd[1]);
return 0;
}

在这种情况下,父进程将收到以下结果:0、1 和 2

如果我删除包含 exit(0) 的行,我如何找出程序创建的进程数?

提前致谢。

最佳答案

下面是一个跟踪创建的 child 数量的工作示例。请注意,fork() 将创建另一个地址空间,不允许您在父/子之间共享变量。但程序计数器将保持不变,因此父项和子项将在调用 fork() 后立即开始执行。

如果你在循环中执行一个fork(),你的 child 将到达主体的末尾,如果它通过条件它将执行主体(包括fork( ) 再次)。

#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>



int main() {
int pfd[2], i, n;
pid_t children_pids[3];
int children_created = 0;
memset(children_pids, 0, sizeof(children_pids));

pipe(pfd);
for(i=0; i<3; i++) {
pid_t p = fork();
if(p == 0) {
write(pfd[1], &i, sizeof(int));
close(pfd[0]); close(pfd[1]);
exit(0);
// break;
}
else {
children_pids[children_created++] = p;
}
}
for(i=0; i<3; i++) {
pid_t p = waitpid(children_pids[i], NULL, 0);
if (p == -1) {
/* error, but expected w/o exit() above */
continue;
}
read(pfd[0], &n, sizeof(int));
printf("%d\n", n);
}
close(pfd[0]); close(pfd[1]);

printf("Total children: %d\n", children_created);
return 0;
}

关于c - 找出进程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com