我有这个代码。我的目的是从父进程创建n个子进程,并在创建每个子进程后打印它们的pid。
然后,我将使用rand_r
函数和exit
让每个子进程随机睡眠一段时间。我要打印子进程的退出顺序即。我要按其退出顺序打印其pid。
这是我的C代码。它没有提供所需的输出:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int func(int n)
{
if(n==0){return 0;}
int pid=fork();
unsigned int k=n;
int x=rand_r(&k) % 3;
//printf("here: %d\n", x);
if(pid==0){
printf("Child %d is created\n",getpid());
func(n-1);
sleep(x);
printf("Child %d exited\n",getpid());
exit(0);
}
return 1;
}
int main(int argc, char *argv[]){
char *inp = argv[1];
int n = atoi(inp);
func(n);
return 0;
}
我想要这样的输出:
Child 7432 is created
Child 7433 is created
Child 7434 is created
Child 7435 is created
Child 7433 exited
Child 7432 exited
Child 7435 exited
Child 7434 exited