我遇到了问题,我需要制作一个程序来制作9个子进程,之后我必须进行3秒的倒计时并使这9个进程等待来自父亲的信号,在他们收到这个信号后,每个孩子们应该说他是什么孩子(如果他是孩子#1,#2,#3等……,按照他们的顺序)。
我所做的就是在这里,一切都很好,我想,直到我作为一个孩子说的部分,我的号码是什么,我不知道怎么做,因为每个孩子都是不同的进程,他们不共享内存,信号不能使用参数,现在我在名为“处理程序”的函数上打印PID,但是如何打印我的号码,作为一个孩子?
#include #include #include #include #include #include void handler(int x); int main() { pid_t child[9]; pid_t child_pid; for (int i = 0; i < 9; ++i) { child_pid = fork(); child[i] = child_pid; if (child_pid == 0) break; if (child_pid < 0) { perror("fork()"); exit(EXIT_FAILURE); } } if (child_pid == 0) { signal(SIGUSR1, handler); pause(); } else { printf("Countdown:n"); sleep(1); printf("3n"); sleep(1); printf("2n"); sleep(1); printf("1n"); sleep(1); for (int i = 0; i < 9; i++) kill(child[i], SIGUSR1); waitpid(-1, NULL, 0); } return 0; } void handler(int sig) { printf("This is Child #%dn", getpid()); exit(0); }
创建一个全局变量:
int my_number;
然后在创建子项的循环中,执行:
if (child_pid == 0) { my_number = i; break; }
然后你可以在处理程序中使用变量:
void handler(int sig) { printf("This is Child #%dn", my_number); exit(0); }
以上就是c/c++开发分享使用fork()的子进程和父进程相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519267.html