/* * 题目: * 编程一个基本多进程测试框架,提示用户输入进程数、和每个进程数运行圈数。(fork) * 进行多进程压力测试。(execve) * 要求父进程能监控所有子进程的退出,避免僵尸进程。(wait) * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/wait.h> int main(int arg, char *args[]) { if (arg < 2) { printf("please print pid num ! "); return -1; } int pidnum = atoi(args[1]); int pid = 0; while (pidnum--) { pid = fork(); if (pid < 0) { printf("fork() failed ! "); break; } if (pid == 0) { //执行测试程序 execl("./runc", "./runc", NULL); } } int status = 0, ret = 0; while (1) { ret = wait(&status); printf("子进程pid=%d ", ret); if (ret == -1) { //屏蔽其他信号 if (errno == EINTR) { continue; } break; } } printf("game is over ! "); return 0; }